在构建UIView层次结构时,UIActivityIndi​​cator正在旋转?

时间:2012-11-02 10:00:13

标签: ios uiview grand-central-dispatch uiactivityindicatorview

有没有办法在构建复杂的UIView层次结构时为UIActivityIndi​​cator设置动画?我有一个复杂的层次结构,可以通过'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
        })
}

那么方向是什么?

2 个答案:

答案 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返回,以便微调器可以在主线程上设置动画。