1.0 秒后的 CAKeyframeAnimation 关键时间未执行

Posted

技术标签:

【中文标题】1.0 秒后的 CAKeyframeAnimation 关键时间未执行【英文标题】:CAKeyframeAnimation key times after 1.0 sec not executing 【发布时间】:2017-07-03 17:42:47 【问题描述】:

由于某种奇怪的原因,当我在 1 秒后输入关键时间时,它们似乎没有执行,但是当我将所有关键时间保持在 1 秒以下时,它们都可以正常执行。不知道为什么会这样,有人有什么想法吗?这是我正在使用的功能:

 func animateKeyFrameGroup() 

let opacity = CAKeyframeAnimation(keyPath: "opacity")
opacity.values = [1, 0, 1]
opacity.keyTimes = [0.1, 1.0, 1.5]

let translation =  CAKeyframeAnimation(keyPath:"transform.translation")
translation.values = [CGPoint(x: 150, y: 300),CGPoint(x: 100, y: 100),CGPoint(x: 150, y: 300)]
translation.keyTimes = [0.1, 1.0, 1.5]

let cornerRadius =  CAKeyframeAnimation(keyPath: "cornerRadius")
cornerRadius.values = [circle.bounds.width, circle.bounds.width/2, circle.bounds.width]
cornerRadius.keyTimes = [0.1, 1.0, 1.5]

let borderColor =  CAKeyframeAnimation(keyPath: "borderColor")
borderColor.values = [UIColor.black.cgColor, UIColor.cyan.cgColor, UIColor.black.cgColor]
borderColor.keyTimes = [0.1, 1.0, 1.5]

let keyframeAnimationGroup = CAAnimationGroup()
keyframeAnimationGroup.animations = [translation, cornerRadius, borderColor, opacity]
keyframeAnimationGroup.duration = 2
keyframeAnimationGroup.isRemovedOnCompletion = false
keyframeAnimationGroup.fillMode = kCAFillModeForwards
circle.layer.add(keyframeAnimationGroup, forKey: nil)
  

【问题讨论】:

【参考方案1】:

根据Apple documentation:

数组中的每个值都是一个介于 0.0 和 1.0 之间的浮点数,用于定义应用相应关键帧值的时间点(指定为动画总持续时间的一部分)。数组中的每个连续值都必须大于或等于前一个值。通常,数组中的元素数应与数组中的元素数相匹配 价值观 属性或控制点的数量 小路 财产。如果他们不这样做,您的动画时间可能不是您所期望的。

因此您可以更改总动画持续时间:keyframeAnimationGroup.duration = 2

和 keyTimes 是总持续时间的分数。比如:keyTime 等于 0.5 -> 2 * 0.5 = 1 秒,keyTime 等于 0.75 -> 2 * 0.75 = 1.5 秒,等等。

【讨论】:

这更有意义!我原本以为关键时间是以秒为单位的!

以上是关于1.0 秒后的 CAKeyframeAnimation 关键时间未执行的主要内容,如果未能解决你的问题,请参考以下文章

在 swiftui 中 2 秒后推送视图

AFNetworking - 等待 60 秒后超时间隔与预期不同

YouTubePlayer有时会在某些设备上暂停1秒后暂停

Ehcache配置详解及CacheManager使用

CAAnimation

dos下执行bat文件,如何让两个命令之间自动延迟3秒后再继续执行?