如何在Swift中移动iOS层

如何在Swift中移动iOS层,ios,swift,Ios,Swift,每次调用moveToPosition()函数时,我都试图将包含黑点的层移动到新位置。moveToPosition()函数会被快速调用多次,每次都会计算一个新的位置,因此理想情况下,我会看到点在平滑的路径中移动。我尝试了以下方法: func moveToPosition(newPosition: CGPoint) { print (newPosition.x, newPosition.y, redLayer.position) self.redLayer.position = ne

每次调用
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
}
从中,我还尝试了以下代码:

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非常陌生,因此任何帮助都将不胜感激

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

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

  • 更改图幅,从而更新图层。例如:

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


  • 例如,本文解释了UIKit中的模型/视图分离。

    什么类型的对象是
    redLayer
    ?在代码中的什么位置调用moveToPosition?CALayer的位置具有隐式动画,因此您不必创建自己的Cabasicanization。看起来您的CABASICANITION没有正确创建,因为它试图更改
    redLayer
    movement
    属性,如果redLayer是CA层,它没有
    movement
    属性(看起来您交换了CABASICANITION中的
    movement
    position
    条目(…)和redLayer.addAnimationredLayer是CALayer()。我在ViewController.swift中的委托方法中调用moveToPosition。如果CALayer有自己的隐式动画,那么我尝试的第一段代码是否接近答案?