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 关键时间未执行的主要内容,如果未能解决你的问题,请参考以下文章