Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 为什么在NSView中使用大多数contentsGravity常量时会出现崩溃?_Macos_Cocoa_Core Animation - Fatal编程技术网

Macos 为什么在NSView中使用大多数contentsGravity常量时会出现崩溃?

Macos 为什么在NSView中使用大多数contentsGravity常量时会出现崩溃?,macos,cocoa,core-animation,Macos,Cocoa,Core Animation,我有一个NSView子类,在initWithFrame方法中,我设置了以下内容: self.wantsLayer = YES; self.layer.contents = [NSImage imageNamed:@"sprite-sheet"]; self.layer.contentsGravity = kCAGravityLeft; 当我运行它时,我得到了预期的视觉效果。。。和具有以下日志的崩溃: **误用NSImage和CALayer。内容重力是左。它应该是resize、resizeAsp

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

self.wantsLayer = YES;
self.layer.contents = [NSImage imageNamed:@"sprite-sheet"];
self.layer.contentsGravity = kCAGravityLeft;
当我运行它时,我得到了预期的视觉效果。。。和具有以下日志的崩溃:

**误用NSImage和CALayer。内容重力是左。它应该是resize、resizeAspect或resizeAspectFill中的一个


为什么??文档中没有指示不应使用其他值。

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

将图像与CALayer对象一起使用 尽管您可以将NSImage对象直接指定给CALayer对象的
contents
属性,但这样做可能并不总是产生最佳结果。您可以使用
layerContentsForContentsCalle:
方法来获取可用于图层内容的对象,而不是使用图像对象。该方法创建一个图像,该图像适合用作层的内容,并且支持层的所有重力模式相反,NSImage类仅支持
kCAGravityResize
kCAGravityResizeAspect
、和
kCAGravityResizeAspectFill
模式


这不是崩溃的答案,但如果属于视图,则不应设置层内容。文档中写道:“如果图层对象绑定到视图对象,则应避免直接设置此属性的内容。视图和图层之间的相互作用通常会导致视图在后续更新期间替换此属性的内容。”我理解苹果为什么这么说,但在这个例子中,我只使用视图来设置精灵的动画,这样就不会有冲突。天哪,在文档中永远不会发现这么快。其他所有内容都表明您可以使用NSImage作为内容,但没有任何警告。