我有ViewController()
和Circle.swift
。
在我的Circle.swift
我有所有动画代码,而ViewController
我只是称之为。
所以,在Circle文件中我有:
func commonSetup() {
...
fillingLayer.strokeStart = start
anim.fromValue = start
anim.toValue = end
fillingLayer.strokeEnd = end
fillingLayer.addAnimation(anim, forKey: "circleAnim")
}
我将start = 0.0
和end = 0.55
设置在class Circle: UIView {
之上。
在我的ViewController
我有一个按钮,点击它我打电话:
func pressed() {
start = 0.55
end = 0.9
Circle().commonSetup()
}
但它不起作用。我的动画没有恢复。我该如何解决?我想首先从0加载到0.55,然后点击按钮后 - 从0.55到0.9。
我的代码中没有看到什么?
答案 0 :(得分:0)
您不应该像以前那样经常更改fromValue
,toValue
和strokeStart
的值:
func commonSetup() {
...
fillingLayer.strokeStart = 0;
anim.fromValue = START_VALUE //value expressed in points
anim.toValue = END_VALUE //value expressed in points
fillingLayer.strokeEnd = end
fillingLayer.addAnimation(anim, forKey: "circleAnim")
}
您应该设置fromValue
,toValue
和strokeStart
属性的值,并且不会更改它们。您只能通过更改strokeEnd
属性来控制动画。
答案 1 :(得分:0)
问题是当您说Circle().commonSetup()
时,您正在创建一个新的圆圈实例。您需要在之前创建的圆圈实例上调用commonSetup
。
所以看起来可能更像这样。在你的视图控制器中,你有一个圆圈的变量。
let progressCircle = Circle()
然后,在你按下的功能中:
func pressed() {
start = 0.55
end = 0.9
progressCircle.commonSetup()
}
如果您想将它用作类函数而不是实例函数(对于类似的东西可能不正确),您需要使用commonSetup
关键字定义class
函数,如下:
class func commonSetup() {
//code
}
然后,您将使用它:Circle.commonSetup()
。请注意Circle
上缺少括号。这是因为您正在运行类函数,而不是初始化类的新实例。但是......在你的情况下,将它作为类函数会很奇怪,因为你的函数实际上是在实例而不是类级别的动作。
我通常习惯使用正确的按键来制作动画。所以你会说:fillingLayer.addAnimation(anim, forKey: "strokeEnd")