加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 启动页动画(CAKeyframeAnimation)

发布时间:2020-12-14 05:55:16 所属栏目:百科 来源:网络整理
导读:前言 项目开发中有个需求,需要给启动页加一个正在加载的动画,先上一个效果图。 上图最底层浅色圆圈,我们定义为 浅A ,转动的为 深B ,可以看到, 深B 是围绕着 浅A 圆圈的边缘旋转的。 下面对实现思想进行分析。 剖析 核心的难点是如何让 深B 紧凑沿着 浅A

前言

项目开发中有个需求,需要给启动页加一个正在加载的动画,先上一个效果图。

上图最底层浅色圆圈,我们定义为浅A,转动的为深B,可以看到,深B是围绕着浅A圆圈的边缘旋转的。 下面对实现思想进行分析。

剖析

核心的难点是如何让深B紧凑沿着浅A的圆边做轨迹运动,为此,我们需要确定一个圆轨迹C,然后让深B轨迹C上做圆周运动

红色圆圈是轨迹C,它的圆点就是浅A的圆点,然后就是确定半径,为了让深B沿着浅A的边缘运动,所以轨迹C的半径应该是(浅A直径 - 深B直径 )/ 2。

代码

确定轨迹C的圆点和半径


let centerX = launchBottomView.center.x
let centerY = launchBottomView.center.y
let radius = (launchBottomView.bounds.size.width - launchTopView.bounds.size.width) / 2

创建椭圆轨迹C


let boundingRect = CGRect(x: centerX - radius,y: centerY - radius,width: radius * 2,height: radius * 2)
let path = CGPath(ellipseIn: boundingRect,transform: nil)

深B做动画


let animation = CAKeyframeAnimation(keyPath:"position")
animation.duration = 3
animation.path = path
animation.calculationMode = kCAAnimationPaced
animation.repeatCount = HUGE
launchTopView.layer.add(animation,forKey:"Move")
调用确定圆点、半径、动画的位置要写在 viewDidAppear方法中,否则会导致获取的控件大小不准确。

源码

https://github.com/LSnumber1/...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读