【问题标题】:Animate from current position in CAAnimation从 CAAnimation 中的当前位置开始动画
【发布时间】:2015-10-20 17:56:15
【问题描述】:

如何从 C 开始将红球的 位置 动画从 AB
即它应该首先从CB 进行动画处理,然后在AB 之间进行不确定的动画处理


我有以下代码 sn-p

animation.fromValue = A
animation.toValue = B
animation.removedOnCompletion = false
animation.autoreverses = true
animation.repeatCount = Float.infinity
animation.duration = 2.0

这段代码 sn-p 的问题是在开始动画之前将位置重置为A
我希望动画从C 开始到B,然后在AC 之间进行动画处理

【问题讨论】:

  • 对象实际上是在位置 C,还是之前的动画在位置 C 处停止?
  • 层位置设置为 C,当它作为子层添加到其父层时

标签: ios cocoa caanimation


【解决方案1】:

您可能需要使用 2 种不同的动画:一种从位置 C 到位置 B,然后是从 B 回到 A 的重复、自动反转动画。如果可以使用,UIView 动画比使用起来容易得多CA动画。在深入研究 CAAnimation 对象之前,我会先尝试 UIView 动画。

【讨论】:

  • 我不能使用UIView,因为我在多平台(iOS 和 OS X)项目中需要它。我也认为如果没有选择,除了使用 2 个动画
【解决方案2】:

您可以尝试执行以下操作:

        UIView.animateWithDuration(0.2, animations: { () -> Void in
            var frame = self.circleView.frame
            frame.origin = A
            self.circleView.frame = frame
        }) { (finished) -> Void in
            let animation = CABasicAnimation(keyPath: "position")
            animation.fromValue = NSValue(CGPoint: CGPoint(x: A, y: self.circleView.frame.origin.y))
            animation.toValue = NSValue(CGPoint: CGPoint(x: B, y: self.circleView.frame.origin.y))
            animation.removedOnCompletion = false
            animation.repeatCount = Float.infinity
            animation.duration = 2.0
            self.circleView.layer.addAnimation(animation, forKey: "position")

    }

如果你想让它可逆而不是在到达 B 时跳到 A 点,你也可以添加 animation.autoreverses = true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多