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()、...」に入れると、デッドロックが発生します(Appleの発表によると思います)。

-(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 に答える