今天使用CoreAnimation写了个Demo,写的时候使用到了CAAnimationGroup和CAKeyframeAnimation,由于需要知道该组合动画的结束时间,所以写了一句
_group.delegate = self;
结果造成了当前的VC无法释放,最后找到了解决方法.
原来这个协议方法
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
的调用并不代表layer的动画真正的界面,只是我们看到的结束而已,为了使VC得到释放,我们需要在这个协议方法里再将delegate置为nil
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
NSLog(@"%s",__func__);
_group.delegate = nil;
}
最后还需要在ViewWillDisappear里面移除层动画,
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.animationView.layer removeAllAnimations];
}
大功告成,这是我们返回主界面,VC就会得到释放.
下面是我实现的简单效果图: