0

我希望能够使用我的 ipad 应用程序执行以下操作:

1 - 按下 UiButton

2 - 显示“正在加载”动画 gif

3 - 显示 gif 后,使用 presentViewController 方法打开目标页面

4 - 目标页面的 ViewDidLoad 用于访问 SQL 数据库中的数据(用于填充该页面上的表。)

这是因为数据需要时间来加载,我希望显示动画 gif,并且我有以下代码来执行此操作,但是它不起作用。该按钮在按下时变为蓝色,然后在页面更改之前加载 gif 仅显示非常短暂的延迟。在显示加载 gif 之前,似乎正在运行上面的第 4 步。谁能解释我做错了什么或如何解决这个问题?

- (IBAction)webObservations:(id)sender {
[loadingGif setAlpha: 1];

NSArray *imageArray = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"g0.png"], [UIImage imageNamed:@"g1.png"], [UIImage imageNamed:@"g2.png"], [UIImage imageNamed:@"g3.png"], [UIImage imageNamed:@"g4.png"], [UIImage imageNamed:@"g5.png"], [UIImage imageNamed:@"g6.png"], [UIImage imageNamed:@"g7.png"], [UIImage imageNamed:@"g8.png"], [UIImage imageNamed:@"g9.png"], nil];
loadingGif = [[UIImageView alloc] initWithFrame:CGRectMake(305, 402, 152, 14)];
[self.view addSubview:loadingGif];
loadingGif.animationImages = imageArray;
loadingGif.animationDuration = 1.5;
[loadingGif startAnimating];

ObViewControllerAdminMenu *monitorMenuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"webObservations"];
monitorMenuViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:monitorMenuViewController animated:YES completion:nil];

}

4

2 回答 2

1

当您调用presentViewController控制器视图时,很快就会加载。视图加载在主线程上,我猜您的处理也在主线程上执行。因此,UI 将被阻止,直到加载完成。

我建议您将动画图像视图移动到monitorMenuViewController. 显示视图时,确定是否需要加载。如果是,则显示并启动图像动画,然后在后台线程上启动数据加载。加载完成后,切换回主线程停止动画并显示结果数据。

于 2013-08-30T20:33:20.797 回答
0

最后非常简单。感谢 Wain 为我指明了方向。

将加载 gif 动画代码移动到其自己的名为 loadAnimation 的过程中。然后将原始过程中的此代码替换为:

[NSThread detachNewThreadSelector:@selector(loadAnimation) toTarget:self withObject:nil];
于 2013-09-04T10:33:57.050 回答