每次调用moveToPosition()
函数时,我都会尝试将包含黑点的图层移动到新位置。使用每次计算的新位置快速调用moveToPosition()
函数多次,因此理想情况下我会看到点在平滑路径中移动。我尝试了以下内容:
func moveToPosition(newPosition: CGPoint) {
print (newPosition.x, newPosition.y, redLayer.position)
self.redLayer.position = newPosition
}
func moveToPosition(newPosition: CGPoint) {
print (newPosition.x, newPosition.y, redLayer.position)
var movement = CABasicAnimation(keyPath: "movement")
movement.fromValue = NSValue(CGPoint: self.redLayer.position)
movement.toValue = NSValue(CGPoint: toPoint)
movement.duration = 0.3
self.redLayer.addAnimation(movement, forKey: "position")
self.redLayer.position = toPoint
}
从How can I move an image in Swift?开始,我也尝试了以下代码:
func moveToPosition(newPosition: CGPoint) {
print (newPosition.x, newPosition.y, redLayer.position)
UIView.animateWithDuration(0.75, delay: 0, options: .CurveLinear, animations: {
self.redLayer.position = newPosition
}, completion: nil)
}
但也许这段代码不起作用,因为它是用于UIView而不是图层?
无论如何,这些都没有用 - 从我的print语句中,我看到newPosition.x和newPosition.y每次都会改变,但是点本身不会在屏幕上移动。有任何想法吗?我对iOS很新,所以任何帮助都将不胜感激!
答案 0 :(得分:2)
CALayer
实例是UIKit中每个UIView
实例背后的基础可视对象。移动或动画视图的图层时,它不会移动视图,只会移动视图的可视化表示。动画完成后,图层会更新以反映视图的实际帧(模型)。
要回答您的问题,要移动视图的图层,您可以执行以下两项操作:
更改视图框,然后更新图层。例如:
UIView.animateWithDuration(0.5) {
movingView.frame = updatedFrame;
}
直接更新图层(例如,使用CoreAnimation),但最后更新视图的模型以反映新的位置/帧。
This文章解释了UIKit中的模型/视图分离。