7

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

NSLoggingcoverImage.frame显示框架本身已正确更新。但是,视图似乎没有被重绘——无论是在缩小还是在扩大框架时。此外,当我退出并重新启动应用程序时, NSImageView 会绘制正确的边框。

什么可能导致这种行为?

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

是否还有其他我错过的 NSImageView 怪癖会导致这种行为?

编辑:

事实证明,这个错误只发生在ImageFrameStyle属性设置为NSImageFrameNone. 如果框架设置为其他任何内容,它会重新绘制就好了。不幸的是,我们需要在没有框架的情况下显示图像。

NSImageViews 的渲染有无框架可以解释这一点有什么不同吗?

4

4 回答 4

5

NSImageView imageFrameStyle我在属性设置为时遇到了非常相似的问题NSImageFrameNone。问题出在自动布局设置中。你可以在这里查看我的问题:如果框架样式为 NSImageFrameNone,NSImageView 不会缩小图像

于 2013-11-19T18:19:12.517 回答
1

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

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

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

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

于 2011-08-13T17:12:36.330 回答
0

有没有可能NSImageView根本没有重绘?如果是这样,我该如何强制重绘?

试试[imageView setNeedsDisplay: YES]

于 2011-08-13T16:59:28.877 回答
0

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

于 2013-07-10T23:49:40.867 回答