UIViewを呼び出すサブクラスがあるとしますAnimatableView。ここで、 の実装layoutSubviewsによって内部コンテンツがレイアウトされます。
AnimatableViewcommenceAnimationLoop次のようなメソッドもあります。
- (void) commenceAnimationLoop {
NSOperation *animationLoop = [[AnimationLoopOperation alloc]init];
[queue addOperation:animationLoop]; //queue is a NSOperationQueue iVar of AnimatableView
[animationLoop release];
}
はのAnimationLoopOperationサブクラスでNSOperationあり、プロパティが になるとmain終了する無限アニメーションを開始するメソッドを持っています。isCancelledYES
私が抱えている問題は、次のようなViewControllerインスタンスをセットアップしてアニメーション化する場所にあります。AnimatableView
- (void) viewDidLoad {
AnimatableView *animatableView = [AnimatableView alloc]initWithFrame:someFrame];
[self.view addSubview: animatableView];
[animatableView commenceAnimationLoop];
[animatableView release];
}
問題は、私のインスタンスが呼び出される前にNSOperation作成されたが実行されることです(つまり、コンテンツがまだ生成およびレイアウトされていないことを意味します)。commenceAnimationLoopAnimatableViewlayoutSubviews
私は、layoutSubviewsメソッドが後で呼び出される (ViewControllerビュー階層をレンダリングする準備ができたとき?) という経験に基づいた推測をしていますが、commenceAnimationLoopメソッドはバックグラウンドですぐに実行されるスレッドを生成します。
animationLoop要約すると、操作を開始する前にビューがレイアウトされるのを待つ最良の方法は何ですか?
私が達成しようとしていることの高レベルのコンテキストを提供するためにNSOperation、連続アニメーションを開始するために使用しています。私のキューでendAnimation呼び出す可能性が高いメソッドを提供できるという考えです。これはすべて、 と の 2 つのメソッドをcancelAllOperations使用して、無限アニメーションを開始してから中断する方法を提供できることを期待して行われます。おそらく、マルチスレッドのルートをたどる間違ったツリーを吠えているのでしょうか?commenceAnimationLoopendAnimation