为什么设置除kCAGravityCenter以外的contentGravity对CALayer没有影响?

时间:2016-08-27 09:00:49

标签: swift macos cocoa calayer

我将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常量,没有任何效果。

ScreenShot

0 个答案:

没有答案