如何使用UIImages数组为CALayer的contents属性设置动画?

时间:2017-03-27 15:59:49

标签: ios uiimageview calayer

我想使用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")

1 个答案:

答案 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分成帧;由于我的动画的性质,我正在做这个分区有点奇怪,所以随时修复时间来均匀划分持续时间

相关问题