我有一个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在有和没有框架的渲染中是否有任何差异可以解释这个?
答案 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”属性设置为什么,以便判断是否已打开图层背景。