如何从停止点恢复动画?

时间:2016-01-23 21:47:17

标签: ios swift animation core-animation

我有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.0end = 0.55设置在class Circle: UIView {之上。

在我的ViewController我有一个按钮,点击它我打电话:

func pressed() {
    start = 0.55
    end = 0.9

    Circle().commonSetup()
}

但它不起作用。我的动画没有恢复。我该如何解决?我想首先从0加载到0.55,然后点击按钮后 - 从0.55到0.9。

我的代码中没有看到什么?

2 个答案:

答案 0 :(得分:0)

您不应该像以前那样经常更改fromValuetoValuestrokeStart的值:

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")
}

您应该设置fromValuetoValuestrokeStart属性的值,并且不会更改它们。您只能通过更改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")