【问题标题】:Resized NSImageView not redrawing调整大小的 NSImageView 不重绘
【发布时间】:2011-10-26 02:29:22
【问题描述】:

我有一个 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 时发生。如果框架设置为其他任何内容,它会重新绘制就好了。不幸的是,我们需要在没有框架的情况下显示图像。

在渲染 NSImageView 时是否有任何不同可以解释这一点?

【问题讨论】:

  • 你是从主线程更新视图的框架吗?
  • 我希望有一个解决方案。如果您发现了任何新内容,请发布。更改框架样式对我没有影响。有趣的是,调整更大的尺寸仍然会绘制我的图像并更新它。如果我将大小调整为更小,它将停止更新。

标签: cocoa nsimageview


【解决方案1】:

NSImageView imageFrameStyle 属性设置为 NSImageFrameNone 时我遇到了非常相似的问题。问题出在自动布局设置中。你可以在这里查看我的问题:NSImageView won't scale image down if frame style is NSImageFrameNone

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 嗨,这还能用吗?我试过了,但它似乎不起作用。
    【解决方案3】:

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

    试试[imageView setNeedsDisplay: YES]

    【讨论】:

    • 感谢您的意见。添加了[coverImage setNeedsDisplay:YES];在设置新框架的代码之后。不幸的是,该错误保持不变。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多