假设我有一个UIView
我将调用的子类AnimatableView
,其中我的实现layoutSubviews
列出了一些内部内容。
AnimatableView
也有commenceAnimationLoop
看起来像这样的方法:
- (void) commenceAnimationLoop {
NSOperation *animationLoop = [[AnimationLoopOperation alloc]init];
[queue addOperation:animationLoop]; //queue is a NSOperationQueue iVar of AnimatableView
[animationLoop release];
}
AnimationLoopOperation
是一个子类,NSOperation
其main
方法将启动一个无限动画,该动画只有在属性isCancelled
变为 时才会退出YES
。
我遇到的问题是在ViewController
我设置和动画这样的实例的地方AnimatableView
:
- (void) viewDidLoad {
AnimatableView *animatableView = [AnimatableView alloc]initWithFrame:someFrame];
[self.view addSubview: animatableView];
[animatableView commenceAnimationLoop];
[animatableView release];
}
问题是在我的实例有机会调用之前NSOperation
在执行中创建的(意味着它的内容尚未生成和布局)。commenceAnimationLoop
AnimatableView
layoutSubviews
我有根据地猜测该layoutSubviews
方法稍后会调用(当ViewController
准备好呈现其视图层次结构时?),但是该commenceAnimationLoop
方法会产生一个立即在后台执行的线程。
总而言之-让我的animationLoop
操作在开始之前等待视图布局的最佳方法是什么?
为我想要实现的目标提供一些高级上下文 - 我正在使用NSOperation
它来启动连续动画。我的想法是我可以提供一种endAnimation
可能会调用cancelAllOperations
我的队列的方法。所有这些都是希望我可以提供一种方法来启动然后中断无限动画,这两种方法commenceAnimationLoop
和endAnimation
. 也许我在沿着多线程的路线吠叫错误的树?