前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CABasicAnimation进入二级界面再回来不生效

CABasicAnimation进入二级界面再回来不生效

作者头像
莫空9081
发布2023-10-16 10:13:02
1700
发布2023-10-16 10:13:02
举报
文章被收录于专栏:iOS 备忘录iOS 备忘录

背景

发现之前同事写的某个界面有个动效, 起初进入的时候是生效的, 进入二级界面再返回动效就没了, 动画用的是CABasicAnimation, 添加在 layer 上面.

解决

看代码没有问题, 毕竟第一次就生效了, 以为是在页面消失时做了什么操作, 查了之后发现, 页面消失时并没有操作.

再回过来看代码, 代码动画部分是在didMoveToWindow中实现的, 大致如下:

didMoveToWindow方法在页面消失和出现的时候都会调用, 难道是添加多次导致不生效了, 改成只添加一次之后发现效果一样, 进入二级页面再返回就不生效了.

代码语言:javascript
复制

override func didMoveToWindow() {
     layer.addSublayer(gradientLayer)
     let basicAnim = CABasicAnimation(keyPath: "animateLocation")
     basicAnim.fromValue = [xxx]
     basicAnim.toValue = [xxx]
     basicAnim.duration = xxx
     basicAnim.repeatCount = Float.infinity
     gradientLayer.add(basicAnim, forKey: nil)
 }

回过头来再来看代码, 实现上没有什么问题, 除了最后一句key设置了为nil, 会不会是这个原因导致的?

设置forKey: "basicAnim", 再查看效果, 发现问题就解决了. 虽然查看文档, key确实可以设置为nil, 即使是我, 习惯上写的时候为了简单, 除非有多个动画的时候才给key赋值, 单个动画的时候就设置为forKey: nil. 果然出来混都是要还的…

最终的生效的大致代码如下:

代码语言:javascript
复制
override func didMoveToWindow() {
        layer.addSublayer(gradientLayer)
        let basicAnim = CABasicAnimation(keyPath: "animateLocation")
        basicAnim.fromValue = [xxx]
        basicAnim.toValue = [xxx]
        basicAnim.duration = xxx
        basicAnim.repeatCount = Float.infinity
        gradientLayer.add(basicAnim, forKey: "basicAnim")
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档