2011-08-12 30 views
7

我有一个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有和没有框架,可以解释这一点渲染有任何区别?

+0

你是从主线程更新视图的框架? –

+0

@Rob - >是的,我是。 – 0x90

+0

我希望有一个解决方案。如果您发现了任何新内容,请发布。改变框架样式对我没有任何影响。有趣的是,调整大一些还是会画出我的形象并更新它。如果我调整较小,它会停止更新。 – spartygw

回答

1

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

正如在编辑中提到的,这个错误只发生在ImageFrameStyle设置为NSImageFrameNone。当我设置ImageFrameStyle到别的东西,然后调整其大小,然后将其设置为NSImageFrameNone调整后再次,东西很好地工作:

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

这工作,但不是很漂亮。因此,我会将问题留待多日,希望能找到更好的答案。

+0

你好这是否仍然有效?我尝试过,但似乎没有工作。 – GeneCode

0

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

尝试[imageView setNeedsDisplay: YES]

+0

感谢您的输入。添加了[coverImage setNeedsDisplay:YES];在设置新框架的代码之后。不幸的是,这个bug仍然没有改变 – 0x90

0

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

相关问题