使用CAAnimationGroup组合关键帧动画,设置delegate,造成VC无法释放问题

本文探讨了在iOS开发中,如何使用CAAnimationGroup结合CAKeyframeAnimation创建动画,并且设置了delegate来监听动画结束。然而,由于特定的协议方法导致UIViewController无法正常释放,分析了内存泄漏的原因并提供了相应的解决方案。示例代码展示了问题的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天使用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就会得到释放.

下面是我实现的简单效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值