0

我知道如何制作动画,显示活动指示器。但我想知道如何立即显示活动指示器。

现在,当我单击按钮时,它将在 5 秒或多秒后加载另一个视图。单击该按钮正在加载子视图。调用该按钮单击方法时,它将调用超过 7 个方法,然后将加载子视图。但是 ActivityIndi​​cator 仅在执行完所有 7 个方法后才会显示。

我想做的是,我想在 Button Click 方法之后立即显示 ActivityIndi​​cator。

任何的想法 ?

4

4 回答 4

2
-(IBAction)button_click{

..
..
..

[self performSelector:@selector(afterDelay) withObject:nil afterDelay:0.3];
}

-(void)afterDelay{

YOUR_Code 
}
于 2012-07-05T09:59:00.380 回答
0

如果您已将代码显示或取消隐藏activityIndicator但未显示您必须使用performSelector:withObject:afterDelay:方法在取消隐藏后执行任何操作或显示activityIndicator延迟为 0.001 将在单击按钮后立即显示指标

快乐编码:)

于 2012-07-05T10:14:22.827 回答
0

问题是您在主线程上执行大量计算(或从互联网加载?),但所有视图突变操作都没有立即调用 - 在运行循环开始时,框架创建一个新的隐式核心动画事务,然后它收集有关视图突变的所有信息,然后在 runloop 结束时提交事务。通过阻塞主线程,您不允许事务提交并启动指标动画。

您可以在文档中阅读有关此架构的信息:核心动画编程指南:事务

有三个选项:

  1. (首选)在后台执行您的操作。
  2. 将您的二进制文件链接到QuartzCore.framework, 然后在您#import <QuartzCore/QuartzCore.h>调用[CATransaction commit]startAnimating调用。这样您就可以提交隐式事务。
  3. 创建自己的显式 CATransaction.
于 2012-07-05T10:59:54.210 回答
-1

如果您在谈论系统活动指示器,请使用:

[[UIApplication sharedApplication] performSelector:@selector(setNetworkActivityIndicatorVisible:) withObject:[NSNumber numberWithBool:YES ] afterDelay:0.0];
于 2012-07-05T10:05:14.253 回答