有没有办法在构建复杂的UIView层次结构时为UIActivityIndicator设置动画?我有一个复杂的层次结构,可以通过'viewDidLoad'中的'addSubview:'添加(在一个主要是storyboard项目中,但这个场景是动态创建的)。没有摆弄GCD,只要初始化需要,UI就会阻塞。将初始化放入'dispatch_sync'(如下所示)不会显示/动画指示器,将其置于'dispatch_async(dispatch_get_global_queue(0,0),...'会导致崩溃(因为UIKit代码需要在主队列上运行? ),并把它放入'dispatch_async(dispatch_get_main_queue(),...'创建一个死锁(我想,苹果宣布)。
-(void)viewDidLoad {
dispatch_sync (dispatch_get_global_queue (0,0), ^{
// initialization here
})
}
那么方向是什么?
答案 0 :(得分:0)
将代码放入方法中并尝试
– performSelectorOnMainThread:withObject:waitUntilDone:
– performSelectorOnMainThread:withObject:waitUntilDone:modes:
答案 1 :(得分:0)
为什么不在viewDidLoad中启动活动指示器,然后使用performSelectorInBackground安排初始化:
-(void)viewDidLoad {
[super viewDidLoad];
[self.activityIndicator startAnimating];
[self performSelectorInBackground:@selector(finishInitializing) withObject:nil];
}
-(void)finishInitializing {
// finish resource-intensive setup
// ...
dispatch_async(dispatch_get_main_queue(), ^{
[self.activityIndicator removeFromSuperview];
// create view hierarchy
// ...
});
}
这允许viewDidLoad
返回,以便微调器可以在主线程上设置动画。