通过新的自定义属性

时间:2016-06-29 15:58:17

标签: ios swift animation calayer

我可以使用CALayer更改属性来为CABasicAnimation对象制作动画,如下代码所示:

let animationOfPropertyOpacity = CABasicAnimation(keyPath: "opacity")
animationOfPropertyOpacity.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
animationOfPropertyOpacity.fromValue = 0
animationOfPropertyOpacity.toValue = 1
myLayer.addAnimation(animationOfPropertyOpacity, forKey: "fade")

在这种情况下,动画将创建0到1之间的线性插值。我可以对其他属性(如缩放,位置或旋转)执行相同操作。

如果我想从A点(0,3)移动到B点(3,0),但是将圆圈对准C点(0,0)?

我希望继续使用fromValuetoValue,但动画制作我称之为旋转的自定义属性。旋转将基于作为中心的点C计算每个插值,并从该中心创建半径。

我需要在哪里放置计算每一步的函数?

我尝试了继承CALayer并添加一个名为rotation的自定义属性。然后将代码添加到needsDisplayForKey以重绘图层:

@NSManaged var rotation: CGFloat

override class func needsDisplayForKey(key: String) -> Bool {
       if (key == "rotation") {
            return true
        }

        return super.needsDisplayForKey(key)
    }

这会调用drawInContext并使整个CALayer变黑。我在drawInContext打印并且在更改其他属性(如不透明度)时不会调用它,似乎没有必要重新绘制图层。

应该有一个方法在CALayer中调用动画的每一帧,我可以在应用更改之前实现一个函数。

我也无法找到正确的位置来实现我已经创建的自定义属性的功能,即使没有动画也能实际反映更改。让我们说一个属性customOpacity只是反转不透明度的影响并相应地更新图层。我只能通过函数updateRotation(rotation: CGFloat)来实现。

0 个答案:

没有答案