我收到的崩溃报告似乎来自一个UIView动画,调用已被解除分配的委托。
Thread 0 Crashed:
0 libobjc.A.dylib 0x334776f6 objc_msgSend + 18
1 UIKit 0x31c566c4 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
2 UIKit 0x31c565d2 -[UIViewAnimationState animationDidStop:finished:]
3 QuartzCore 0x30045a26 run_animation_callbacks
我使用以下模式将当前视图控制器设置为动画的委托:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
...
[UIView commitAnimations];
我的问题是,如何在dealloc方法中将该委托引用设置为nil?有没有办法保留对动画的引用?或者正在获取正在进行的动画?
答案 0 :(得分:3)
CALayer类处理UIViews的所有动画。您可以使用layer
属性访问UIView的图层。如果您要使用实际字符串替换[UIView beginAnimations: context:]
的第一个参数,则可以使用CALayer的animationForKey:
和removeAnimationForKey:
方法直接访问该动画。
但在这种情况下,在[view.layer removeAllAnimations]
调用dealloc
之前调用[super dealloc]
可能就足够了。这将停止任何自定义UIView动画,显然,将它们从其图层中删除。