0

アプリのデリゲートの(void)applicationDidFinishLaunching:(UIApplication *)applicationメソッド内に、アクティビティインジケーターを表示する次のコードがあります。

spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.alpha = 1.0;
spinner.center = self.window.center;
spinner.layer.shadowColor = [UIColor grayColor].CGColor;
spinner.layer.shadowRadius = 1;
spinner.layer.shadowOpacity = 0.5;
spinner.layer.shadowOffset = CGSizeMake(0, 1);
[self.window addSubview:spinner];

上記のコードは、iOS5以前では正常に機能します。ただし、iOS 6ではアクティビティインジケーターが表示されません。iOS6でもアクティビティインジケーターが表示されるように上記のコードを変更するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

0

applicationDidFinishLaunching:withOptions:メソッドが戻るまで、ビューは UI に表示されないことに注意してください。UIActivityIndicatorViewを設定して、すぐに表示されることを期待することはできません。現在の実行ループが終了するまで、iOS は UI を更新しません。表向きDefault.pngは の実行中に表示され、そのメソッドが完了するまで UI を引き継ぐことはありませんapplicationDidFinishLaunching:withOptions:rootViewController

UIActivityIndicatorViewアプリが起動していることをユーザーに示すために を表示したい場合Default.pngは、次のようにすることができます。

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.frame = CGRectMake(0.0, 0.0, 60.0, 60.0);
spinner.center = CGPointMake(imageView.center.x, imageView.center.y);

spinner.alpha = 1.0;
spinner.layer.shadowColor = [UIColor grayColor].CGColor;
spinner.layer.shadowRadius = 1;
spinner.layer.shadowOpacity = 0.5;
spinner.layer.shadowOffset = CGSizeMake(0, 1);
[spinner startAnimating];
[imageView addSubview:spinner];
[self.window addSubview:imageView];
[self.window makeKeyAndVisible];    

dispatch_async(dispatch_get_main_queue(), ^{
    // The rest of your method here
    // Be sure to remove the UIImageView from the window when the processing is complete.
}); 

このようにして、applicationDidFinishLaunching:withOptions:制御が iOS に戻り、ビューが表示されます。をロードしたらrootViewController、ウィンドウから削除できimageViewます。

また、 を にUIActivityIndicatorView直接追加UIWindowすることはお勧めできませんが、上記で示したように、既にウィンドウのサブビューである既存のビューに追加する必要があります。

これが役立つことを願っています。

于 2012-11-16T19:45:52.143 に答える
0

次の行を追加します。

[spinner performSelector:@selector(startAnimating) withObject:nil afterDelay:0.0f];
于 2012-11-16T21:06:48.590 に答える
0

コードに最後の 2 行を追加してみてください。

spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.alpha = 1.0;
spinner.center = self.window.center;
spinner.layer.shadowColor = [UIColor grayColor].CGColor;
spinner.layer.shadowRadius = 1;
spinner.layer.shadowOpacity = 0.5;
spinner.layer.shadowOffset = CGSizeMake(0, 1);
[self.window addSubview:spinner];


[spinner setHidden:YES];
[spinner startAnimating];
于 2012-11-16T14:32:46.203 に答える