我将contentsGravity
设置为图层托管NSView
,如下所示,但它仅适用于kCAGravityCenter
。同样来自Apple文档,提到使用我在代码中实现的layerContentsForContentsScale
。
layerContentsForContentsScale:
在要将图像用作图层内容的情况下使用此方法。此方法提供包装在对象中的图像数据,该对象正确地尊重图层支持的所有可能的内容重力。
class ViewController: NSViewController, CALayerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
view.wantsLayer = true
let imageLayer = CALayer()
imageLayer.delegate = self
imageLayer.frame = CGRect(x: 50.0, y: 50.0, width: 500.0, height: 500.0)
imageLayer.backgroundColor = NSColor.gray.cgColor
view.layer?.addSublayer(imageLayer)
imageLayer.setNeedsDisplay()
}
func display(_ layer: CALayer) {
layer.contents = NSImage(named:"test")?.layerContents(forContentsScale: 1.0)
layer.contentsGravity = "kCAGravityTopLeft"
}
}
如果未设置contentsGravity
,则图像正确填充图层的边界。当contentsGravity设置为kCAGravityCenter
时,图像正确居中于边界。对于任何其他contentsGravity
常量,没有任何效果。