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