0

有没有办法在构建复杂的 UIView 层次结构时为 UIActivityIndi​​cator 设置动画?我有一个复杂的层次结构,要通过'viewDidLoad'中的'addSubview:'添加(在一个主要的故事板项目中,但这个场景是动态创建的)。不摆弄 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
        })
}

那么前进的方向是什么?

4

2 回答 2

0

将代码放入方法中并尝试

– performSelectorOnMainThread:withObject:waitUntilDone:
– performSelectorOnMainThread:withObject:waitUntilDone:modes:
于 2012-11-02T10:05:47.880 回答
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返回,以便微调器可以在主线程上设置动画。

于 2012-11-03T05:34:02.863 回答