为什么在NSView中使用大多数contentsGravity常量时会看到崩溃?

时间:2014-03-10 21:28:50

标签: macos cocoa core-animation

我有一个NSView子类,并在initWithFrame方法中设置以下内容:

self.wantsLayer = YES;
self.layer.contents = [NSImage imageNamed:@"sprite-sheet"];
self.layer.contentsGravity = kCAGravityLeft;

当我运行它时,我得到了预期的视觉效果......以及以下日志崩溃:

  

* * 滥用NSImage和CALayer。 contentsEravity被留下。它应该是resize,resizeAspect或resizeAspectFill之一。

为什么呢?文档中没有迹象表明不应使用其他值。

1 个答案:

答案 0 :(得分:6)

实际上,您看到的行为是在文档中。它只是在NSImage文档中,而不是CALayer文档(由我强调):

  

将图像与CALayer对象一起使用

     

虽然您可以将NSImage对象直接分配给CALayer对象的contents属性,但这样做可能并不总能产生最佳结果。您可以使用layerContentsForContentsScale:方法获取可用于图层内容的对象,而不是使用图像对象。该方法创建的图像适合用作图层的内容,并支持所有图层的重力模式。 相比之下,NSImage类仅支持kCAGravityResizekCAGravityResizeAspectkCAGravityResizeAspectFill模式