ios - 如何在 Swift 中移动 iOS 层

标签 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 而不是图层的?

无论如何,这些都不起作用 - 从我的打印语句中,我看到 newPosition.x 和 newPosition.y 每次都在变化,但点本身并没有在屏幕上移动。有任何想法吗?我是 iOS 的新手,所以我们将不胜感激!

最佳答案

CALayer 实例是 UIKit 中每个 UIView 实例背后的底层视觉对象。当您移动或动画 View 的图层时,它不会移动 View ,而只会移动 View 的视觉表示。动画完成后,层将更新以反射(reflect) View 的实际框架(模型)。

要回答您的问题,要移动 View 的层,您可以做两件事:

  1. 更改 View 框架,这又会更新图层。例如:

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

This例如,文章解释了 UIKit 中的模型/ View 分离。

关于ios - 如何在 Swift 中移动 iOS 层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36351245/

相关文章:

objective-c - NSKeyedUnarchiver 无法解码类 NSKnownKeysDictionary1 的对象

ios - Swift如何访问嵌套结构中的信息?

swift - 图像未在 swiftui collectionview 上加载

ios - 如何获取 NSManagedObject 的主键值?

objective-c - "[AnyObject]"与 "NSArray"不同

ios - HeightForRowAt indexPath 问题

ios - 在同一 View Controller 中显示图像和视频

ios - 从 NavigationController 后退按钮返回多个 ViewController

ios - 如何判断图片中是否没有文字--MLKit VisionCloudTextRecognizer

ios - 如何在 swift 2/iOS 9 中正确更改状态栏样式?