如何为子层内容设置动画?
How to animate sublayer contents?
我有一个图层,想为该图层创建一个动画,它会更新其中一个子图层的内容。 CAAnimation keyPath
有一个符号,比如 sublayers.layerName.propertyName
来更新子层的一些值,但似乎它不适用于 .contents
属性.
func rightStepAfter(_ t: Double) -> CAAnimation {
let rightStep = CAKeyframeAnimation(keyPath: "sublayers.right.contents")
rightStep.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
rightStep.keyTimes = [0, 1]
rightStep.values = [UIImage(named:"leftfoot")!.cgImage!, UIImage(named:"rightfoot")!.cgImage!]
rightStep.beginTime = t
rightStep.duration = stepDuration
rightStep.fillMode = .forwards
return rightStep
}
func leftStepAfter(_ t: Double) -> CAAnimation {
let leftStep = CAKeyframeAnimation(keyPath: "sublayers.left.opacity")
leftStep.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
leftStep.keyTimes = [0, 1]
leftStep.values = [0, 1]
leftStep.beginTime = t
leftStep.duration = stepDuration
leftStep.fillMode = .forwards
return leftStep
}
此处 leftStepAfter
创建正确的动画,更新子层的不透明度,rightStepAfter
不更新子层的 contents
。如果从 keyPath 中删除 sublayers.right.
- 动画将正确更改 CURRENT 层的内容。 Project to check it and the original project.
为什么我的动画不工作以及如何解决?
没有找到我最初问题的答案(通过键路径),但通过为每个子层创建多个动画解决了我的问题。
我有一个图层,想为该图层创建一个动画,它会更新其中一个子图层的内容。 CAAnimation keyPath
有一个符号,比如 sublayers.layerName.propertyName
来更新子层的一些值,但似乎它不适用于 .contents
属性.
func rightStepAfter(_ t: Double) -> CAAnimation {
let rightStep = CAKeyframeAnimation(keyPath: "sublayers.right.contents")
rightStep.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
rightStep.keyTimes = [0, 1]
rightStep.values = [UIImage(named:"leftfoot")!.cgImage!, UIImage(named:"rightfoot")!.cgImage!]
rightStep.beginTime = t
rightStep.duration = stepDuration
rightStep.fillMode = .forwards
return rightStep
}
func leftStepAfter(_ t: Double) -> CAAnimation {
let leftStep = CAKeyframeAnimation(keyPath: "sublayers.left.opacity")
leftStep.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
leftStep.keyTimes = [0, 1]
leftStep.values = [0, 1]
leftStep.beginTime = t
leftStep.duration = stepDuration
leftStep.fillMode = .forwards
return leftStep
}
此处 leftStepAfter
创建正确的动画,更新子层的不透明度,rightStepAfter
不更新子层的 contents
。如果从 keyPath 中删除 sublayers.right.
- 动画将正确更改 CURRENT 层的内容。 Project to check it and the original project.
为什么我的动画不工作以及如何解决?
没有找到我最初问题的答案(通过键路径),但通过为每个子层创建多个动画解决了我的问题。