我想使用UIImageView
的contents属性为CALayer
放置的蒙版设置动画。不幸的是我目前的实施
似乎只在数组的第一个和最后一个图像之间设置动画,而不在两个过渡之间传递。有没有办法实现这一点,或者我应该关注其他事情,如CAReplicatorLayer
?
这是我目前所拥有的:
let mask = CALayer()
mask.frame = self.frame
self.layer.mask = mask
mask.contents = transitions.first?.cgImage
let maskAnimation = CABasicAnimation(keyPath: "contents")
maskAnimation.fromValue = transitions.first?.cgImage
maskAnimation.toValue = transitions.last?.cgImage
maskAnimation.duration = duration
mask.contents = transitions.last
mask.add(maskAnimation, forKey: "ContentsAnimation")
答案 0 :(得分:1)
动画系统并不神奇地知道在第一张和最后一张图像之间进行插值意味着什么。你必须明确告诉它。这正是关键帧动画的用途。
这是一个从我的项目中形成这样一个动画的例子:
let anim = CAKeyframeAnimation(keyPath:#keyPath(CALayer.contents))
anim.values = self.images.map {$0.cgImage!}
anim.keyTimes = [0.0, 0.25, 0.5, 0.75, 1.0]
anim.calculationMode = kCAAnimationDiscrete
anim.duration = 1.5
如您所见,我们有一系列图像;它们是UIImages,所以我必须得到它们的CGImage支持(我假设你的transitions
是相似的)。 keyTimes
数组用于将duration
分成帧;由于我的动画的性质,我正在做这个分区有点奇怪,所以随时修复时间来均匀划分持续时间 。