每次调用 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 而不是图层的?
无论如何,这些都不起作用 - 从我的打印语句中,我看到 newPosition.x 和 newPosition.y 每次都在变化,但点本身并没有在屏幕上移动。有任何想法吗?我是 iOS 的新手,所以我们将不胜感激!
最佳答案
CALayer
实例是 UIKit 中每个 UIView
实例背后的底层视觉对象。当您移动或动画 View 的图层时,它不会移动 View ,而只会移动 View 的视觉表示。动画完成后,层将更新以反射(reflect) View 的实际框架(模型)。
要回答您的问题,要移动 View 的层,您可以做两件事:
更改 View 框架,这又会更新图层。例如:
UIView.animateWithDuration(0.5) { movingView.frame = updatedFrame; }
直接更新层(例如,使用 CoreAnimation),但最后更新 View 的模型以反射(reflect)新的位置/框架。
This例如,文章解释了 UIKit 中的模型/ View 分离。
关于ios - 如何在 Swift 中移动 iOS 层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36351245/