macOS Swift CALayer.contents不加载图像

macOS Swift CALayer.contents不加载图像,macos,cocoa,core-animation,calayer,nsimage,Macos,Cocoa,Core Animation,Calayer,Nsimage,下面的代码创建了一个红色矩形,该矩形被设置为从左到右在视图中移动的动画。我想有一个从图像加载任意形状,要么叠加或替换矩形。但是,InitializeClickLayer函数中的circleLayer.contents=NSImage语句不会产生任何效果。diagnostic print语句似乎验证图像是否存在并已找到,但视图中未显示图像。如何将图像放入层中以替换已设置动画的红色矩形?谢谢 代码如下: 进口可可 类ViewController:NSViewController{ var ci

下面的代码创建了一个红色矩形,该矩形被设置为从左到右在视图中移动的动画。我想有一个从图像加载任意形状,要么叠加或替换矩形。但是,InitializeClickLayer函数中的circleLayer.contents=NSImage语句不会产生任何效果。diagnostic print语句似乎验证图像是否存在并已找到,但视图中未显示图像。如何将图像放入层中以替换已设置动画的红色矩形?谢谢

代码如下:

进口可可

类ViewController:NSViewController{

   var circleLayer = CALayer()

   override func viewDidLoad() {

       super.viewDidLoad()
       self.view.wantsLayer = true
       initializeCircleLayer()
       simpleCAAnimationDemo()
   }

   func initializeCircleLayer(){

       circleLayer.bounds = CGRect(x: 0, y: 0, width: 150, height: 150)
       circleLayer.position = CGPoint(x: 50, y: 150)
       circleLayer.backgroundColor = NSColor.red.cgColor
       circleLayer.cornerRadius = 10.0

       let testIm = NSImage(named: NSImage.Name(rawValue: "testImage"))
       print("testIm = \(String(describing: testIm))")

       circleLayer.contents = NSImage(named: NSImage.Name(rawValue:  "testImage"))?.cgImage
       circleLayer.contentsGravity = kCAGravityCenter

       self.view.layer?.addSublayer(circleLayer)
   }

   func simpleCAAnimationDemo(){

       circleLayer.removeAllAnimations()
       let animation = CABasicAnimation(keyPath: "position")
       let startingPoint = NSValue(point: NSPoint(x: 50, y: 150))
       let endingPoint = NSValue(point: NSPoint(x: 600, y: 150))
       animation.fromValue = startingPoint
       animation.toValue = endingPoint
       animation.repeatCount = Float.greatestFiniteMagnitude
       animation.duration = 10.0
       circleLayer.add(animation, forKey: "linearMovement")
   }
}

为什么它不起作用 原因是什么

circleLayer.contents = NSImage(named: NSImage.Name(rawValue:  "testImage"))?.cgImage
不起作用是因为它是对方法的引用,这意味着它的类型是

((UnsafeMutablePointer<NSRect>?, NSGraphicsContext?, [NSImageRep.HintKey : Any]?) -> CGImage?)? 

是的,就是这样。
circleLayer.contents = NSImage(named: NSImage.Name(rawValue:  "testImage"))