0

iOS アクティビティ インジケーターの標準コードと思われるものを実装していますが、表示されません。これは、ここからのアドバイスに従って、私がしていることです。

viewDidLoad

indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicator.frame = CGRectMake(0, 0, 80.0, 80.0);
indicator.hidden = NO;
indicator.center = self.view.center;
[self.view insertSubview:indicator atIndex:100]; // to be on the safe side
[indicator bringSubviewToFront:self.view];
[UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE;

次にviewWillAppear、長いプロセス メソッドを呼び出す直前に、次のようにします。

[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];

私のスレッドはアニメーションを開始します:

-(void)threadStartAnimating:(id)data
{
    [indicator startAnimating];
}

次に、バックグラウンドでいくつかの作業を行う Parse.com メソッドがあります。

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {       
    if(!error) {
        // do some work
        [indicator stopAnimating];
    }
}

私が見る限り、これはうまくいくはずです。しかし、そうではありません。私は何が欠けていますか?

4

2 に答える 2

1

ビューを操作したい場合 (addSubview など) はいつでも、viewWillAppear で行うのが最善です。viewDidLoad は、ビューを操作するのが早すぎます。これは、他のメソッドがまだビューを変更しているためです (つまり、setFrame)。

したがって、現在のコードを viewDidLoad から viewWillAppear に移動するとうまくいくはずです!

于 2014-01-03T22:28:12.017 に答える
0

startAnimating、新しいスレッドではなく、メイン スレッドで呼び出す必要があります。を呼び出すだけ[indicator startAnimating];ですviewWillAppear

于 2014-01-03T16:22:30.207 に答える