请查看以下方法,该方法用于将子层沿y轴向上移动50个点。特别要注意最后一行(已注释掉)。
@objc func animateButtonPressed(_ sender: UIButton) {
let initialValue = customView.sublayer.position.y
let finalValue = customView.sublayer.position.y - 50
let animation = CABasicAnimation(keyPath: "position.y")
animation.fromValue = initialValue
animation.toValue = finalValue
animation.duration = 2
customView.sublayer.add(animation, forKey: "Reposition")
//customView.sublayer.position.y = finalValue
}
通过显示的代码,我得到以下行为:
我读到的所有内容都告诉我发生“跳回”,因为我没有更新模型以反映最终值。因此,让我们通过取消注释最后一行来更新模型。现在的行为是:
由于在模型上设置了最终位置,显然发生了跳跃。我觉得自己处于困境。22.任何帮助将不胜感激。
可以在GitHub
上找到说明问题的可行项目。Xcode 10.0,iOS 12.2,Swift 4.2
答案 0 :(得分:1)
这是我的书中开发和解释的规范形式。事先将动画层设置为其最终值 ,但关闭隐式动画,如下所示:
@objc func animateButtonPressed(_ sender: UIButton) {
let initialValue = customView.sublayer.position.y
let finalValue = customView.sublayer.position.y - 50
CATransaction.setDisableActions(true) // <-- *
customView.sublayer.position.y = finalValue // <-- *
let animation = CABasicAnimation(keyPath: "position.y")
animation.fromValue = initialValue
animation.toValue = finalValue
animation.duration = 2
customView.sublayer.add(animation, forKey: "Reposition")
}