Cocoa 调整大小的NSImageView未重新绘制

Cocoa 调整大小的NSImageView未重新绘制,cocoa,nsimageview,Cocoa,Nsimageview,我有一个NSImageView,它从应用程序包中加载一个图像 其设置如下: coverImage.image = [NSImage imageNamed:@"themeSignEnd.png"]; coverImage.imageScaling = NSImageScaleNone; coverImage.imageAlignment = NSImageAlignLeft; 图像显示得很好 NSImageView的大小是基于几个其他因素计算的,然后使用以下代码进行设置: coverImage.

我有一个NSImageView,它从应用程序包中加载一个图像

其设置如下:

coverImage.image = [NSImage imageNamed:@"themeSignEnd.png"];
coverImage.imageScaling = NSImageScaleNone;
coverImage.imageAlignment = NSImageAlignLeft;
图像显示得很好

NSImageView的大小是基于几个其他因素计算的,然后使用以下代码进行设置:

coverImage.frame = CGRectMake((1280 - 869) / 2, 0, 869 * percentage, 800);
这在第一次完成时(当应用程序启动时)工作得非常好

NSImageView的大小相同,包含的图像在适当的边框处被截断

不幸的是,当我尝试在应用程序运行时调整NSImageView的大小时(使用上面相同的代码),它不会明显地更新

n记录
coverImage.frame
表明框架本身已正确更新。然而,视图似乎没有被重新绘制-无论是在缩小还是在增大帧时。此外,当我退出并重新启动应用程序时,NSImageView会绘制正确的边框

是什么导致了这种行为

NSImageView是否可能只是没有重新绘制?如果是,我如何强制重画

是否有其他我忽略的NSImageView怪癖会导致这种行为

编辑:

事实证明,只有当
ImageFrameStyle
属性设置为
NSImageFrameNone
时,才会发生此错误。如果帧被设置为其他值,它将被重新绘制。不幸的是,我们需要在没有边框的情况下显示图像

对于NSImageViews,有帧和没有帧的渲染有什么区别可以解释这一点吗

NSImageView
是否可能只是没有重新绘制?如果是,我如何强制重画


尝试
[imageView setNeedsDisplay:YES]

所以我找到了一种方法来解决这个问题,不过这是相当粗糙的

如编辑中所述,此错误仅在ImageFrameStyle设置为NSImageFrameNone时发生。当我将ImageFrameStyle设置为其他值,然后调整其大小,然后在调整大小后再次将其设置为NSImageFrameNone时,一切正常:

[coverImage setImageFrameStyle: NSImageFramePhoto];
coverImage.frame = CGRectMake((1280 - 869) / 2, 0, 869 * percentage, 800);
[coverImage setImageFrameStyle: NSImageFrameNone];

这很管用,但不是很漂亮。因此,我将把这个问题留待几天,希望能找到更好的答案。

在使用层备份视图时,我遇到了一些意想不到的行为。在这些类型的视图中,图层会缓存绘制的内容(包括图像),从而导致某些意外行为。查看NSView的“WantLayer”属性设置为什么,以判断是否启用了层备份。

我在
NSImageView
imageFrameStyle
属性设置为
NSImageFrameNone
时遇到了非常类似的问题。问题发生在自动布局设置中。您可以在这里查看我的问题:

是否从主线程更新视图的框架?我希望有解决方案。如果你发现了什么新东西,请把它贴出来。更改框架样式对我没有影响。有趣的是,调整较大的尺寸仍然会绘制并更新我的图像。如果我调整的更小,它就会停止更新。谢谢你的输入。增加了[封面图像设置需要显示:是];在设置新帧的代码之后。不幸的是,这个bug没有改变。嗨,这还能用吗?我试过了,但似乎不起作用。