drawRect
カスタムUIView
サブクラス用の複雑なQuartzルーチンがあります。描画には数秒かかる場合があります。UIActivityIndicator
描いている間見せたいです。ただし、描画が完了した後、インジケーターの回転を停止する(そして非表示にする)必要があります。
インジケーターのアニメーションを開始してから、performSelector
単に呼び出すカスタムメソッドを使用しようとしましたsetNeedsDisplay
。私の考えではperformSelector
、次の実行ループまで待機しますよね?その場合、私のインジケーターはメインスレッドで開始する時間があります。これは機能しているようですが、アニメーションを停止するために最後にコードを追加するとすぐに、drawRect
このアニメーションが開始する前に終了しているかのように、インジケーターがまったく表示されません。
助言がありますか?
私はこの図面を次のように呼びます。
[self.spinner startAnimating];
[self performSelectorOnMainThread:@selector(redraw) withObject:nil waitUntilDone:YES];//tried both YES and NO here
-(void)redraw{
[self.customView setNeedsDisplay];
}
drawRect:
単に最後にこれがあります:
- (void)drawRect:(CGRect)rect{
//bunch of drawing
[self.nav stopSpinner]; // reference to a controller class
}
self.nav
オブジェクトにはこれがあります:
-(void)stopSpinner{
self.spinner.hidden=YES;
[self.spinner stopAnimating];
}
そして、spinner
オブジェクトは最初は次のように作成されます。
self.spinner=[[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]autorelease];
self.spinner.hidden=YES;
[self.viewController.view addSubview:self.spinner];