2009-05-21 18 views
1

ビューを変更するときに私のiPhoneにUIActivityIndi​​catorViewを表示したいと思います。 私は次のコードを書かれている:iPhoneのUIActivityIndi​​catorViewに関する問題

- (void)viewDidLoad 
{ 

    spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    [spinner setCenter:CGPointMake(320/2.0, 460/2.0)]; // I do this because I'm in landscape mode 
    [self.view addSubview:spinner]; 
} 

を、ボタンのクリックイベントに私は、ビューを変更すると、その時間の間に、私はindicatorViewので、私は

-(IBAction)buttonClick:(id)sender 
{ 

    [spinner startAnimating]; 
    ViewController *lController = [[ViewController alloc] initWithNibName: @"View" bundle:nil]; 
    self.viewController = lController; 
    [lController release]; 
    // 
    [[self mainController] dismissModalViewControllerAnimated:YES]; 
    [lViewController.view removeFromSuperview]; 
    [self.view addSubview: lController.view]; 
    [spinner stopAnimating]; 
} 

を書くことがあることを示したいですインジケータが表示されないので、私はどこに間違っているのか教えてください。

答えて

0

buttonClickには、lController.viewをスピナーの上に追加しているようです(これはviewDidLoadに先に追加されています)。モーダル解雇で何が起こっているのかをスニペットから伝えるのは難しいので、それが原因ではないと仮定しよう。

新しいサブビューを追加した後に[self.view bringSubviewToFront:spinner]を呼び出すか、または[self.view insertSubview:lController.view belowSubview:spinner]を呼び出して、スピナーの下にビューを置くことができます。スピナーのhidesWhenStoppedプロパティをYESに設定して、停止時に自動的に非表示にすることもできます。

ビューを読み込んで切り替えても実際にはそれほど時間がかからないことがあるので、状況が速すぎるとスピナーが表示されないことがあります。

1

UIActivityIndi​​catorはメインスレッド上でアニメーションされます(アニメーションフレームは実行ループごとに変化します)。起動してコードを実行して停止すると、アニメーション化する機会はありません(現在の実行ループを終了することはないため)。

コードをバックグラウンドスレッドで実行してみてください。これにより、メインスレッドはアニメーションフレームを処理できます。

関連する問題