调整大小的NSImageView不重绘

时间:2011-08-12 19:37:36

标签: cocoa nsimageview

我有一个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的大小(使用上面相同的代码)时,它不会明显更新。

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

什么可能导致这种行为?

是否有可能不重绘NSImageView?如果是这样,我该如何强制重绘?

我错过了NSImageView还有其他可能导致这种行为的怪癖吗?

修改

事实证明,只有在ImageFrameStyle属性设置为NSImageFrameNone时才会出现此错误。如果框架被设置为其他任何东西,它会被重新绘制得很好。不幸的是,我们需要在没有框架的情况下显示图像。

NSImageViews在有和没有框架的渲染中是否有任何差异可以解释这个?

4 个答案:

答案 0 :(得分:5)

我的NSImageView imageFrameStyle属性设置为NSImageFrameNone的问题非常类似。发生问题的原因是自动布局设置。您可以在此处查看我的问题:NSImageView won't scale image down if frame style is NSImageFrameNone

答案 1 :(得分:1)

所以我找到了解决这个问题的方法,但这是相当hackish。

如编辑中所述,只有在ImageFrameStyle设置为NSImageFrameNone时才会出现此错误。当我将ImageFrameStyle设置为其他内容,然后调整大小,然后在调整大小后再次将其设置为NSImageFrameNone,一切正常:

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

这可行,但不是很漂亮。因此,我会将问题保持开放几天,以期找到更好的答案。

答案 2 :(得分:0)

  

是否可能不会重绘NSImageView?如果是这样,我该如何强制重绘?

尝试[imageView setNeedsDisplay: YES]

答案 3 :(得分:0)

使用图层支持的视图时,我遇到了一些意外行为。在这些类型的视图中,图层会缓存绘制的内容(包括图像),从而导致某些意外行为。查看NSView的“wantsLayer”属性设置为什么,以便判断是否已打开图层背景。