如何在Swift中移动iOS图层

时间:2016-04-01 08:10:26

标签: ios swift

每次调用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很新,所以任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:2)

CALayer实例是UIKit中每个UIView实例背后的基础可视对象。移动或动画视图的图层时,它不会移动视图,只会移动视图的可视化表示。动画完成后,图层会更新以反映视图的实际帧(模型)。

要回答您的问题,要移动视图的图层,您可以执行以下两项操作:

  1. 更改视图框,然后更新图层。例如:

    UIView.animateWithDuration(0.5) {
    
       movingView.frame = updatedFrame;
    }
    
  2. 直接更新图层(例如,使用CoreAnimation),但最后更新视图的模型以反映新的位置/帧。

  3. 例如,

    This文章解释了UIKit中的模型/视图分离。