添加CABasicAnimation后,子图层不会永久更新

时间:2017-06-24 03:22:56

标签: swift cabasicanimation cgpath

我正在编写一个函数来定义屏幕上突出显示区域的位置和大小,并在用户点击教程时动画更改区域。具体来说,整个屏幕都是灰色的,除了这个区域,该区域由下面函数中引用的corners()函数定义。 corners()函数正常工作,但下面的函数不允许子层/路径在每次执行函数后永久更改为新位置。换句话说,每次调用该函数时,动画的开始就是屏幕上路径的原始位置。

func prepareForEditing(editing:Bool) {
        let animation = CABasicAnimation(keyPath: "path")
        animation.duration = 0.3

        //the corners() function sets the sublayer, including the sublayer's path

        //let lastShape = corners(frame: TutorialModal.tutorialRects[tutorialItem - 2])
        let newShape = corners(frame: TutorialModal.tutorialRects[tutorialItem - 1])

        animation.fromValue =  (dimScreen.layer.sublayers?[0] as! CAShapeLayer).path
        animation.toValue = newShape.path

        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        animation.autoreverses = false


        dimScreen.layer.sublayers?[0].add(animation, forKey: nil)

}

我最初使用lastShape为切口设置动画,然而,这导致动画的持续时间被忽略(即,即时更新剪切而不是在屏幕上为其设置动画)。我更新了动画的fromValue特性以使用实际的当前子图层路径(来自dimScreen视图),现在我遇到了上述问题。

我还尝试在动画后完全删除并替换dimScreen子图层,但在重新应用路径之前清除整个屏幕,这不是我正在寻找的。

0 个答案:

没有答案