【问题标题】:NSScrollView and ScrollToPoint on an NSImageNSImage 上的 NSScrollView 和 ScrollToPoint
【发布时间】:2012-05-02 16:31:42
【问题描述】:

我有一个 NSView 作为 NSScrollView 的 documentView。我还有一个 NSImageView 作为 NSView 的子视图。图像动态改变大小,因此滚动条在不同时间变为活动/不活动。图像更改后,我想滚动到图像上的某个点。从 NSView 的 drawRect: 方法中,我调用 [[myScrollView contentView] scrollToPoint: myPoint];

滚动条会更新,图像会按我的意愿显示,但是一旦滚动图像,就会出现双图像或图像的一部分被截断。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 你为什么在-drawRect:内滚动?除了绘图,你不应该做任何事情,绝对不能做任何会调用任何-setNeedsDisplay... 方法的东西。
  • 我下一次解决这个问题的尝试是在 -drawRect 方法之外设置图像和 documentView 框架。我试试看
  • 你是对的。一旦我将 setFrame、setOrigin、scrollToPoint 等方法从 -drawRect 中移出,一切都运行良好。非常感谢!

标签: cocoa nsimage nsscrollview


【解决方案1】:

听起来您可能想在 Interface Builder 中或以编程方式关闭 NSScrollView 的“滚动复制”行为选项。

来自Scroll View Programming Guide for Mac OS X: How Scrolling Works

NSClipView 类通过 scrollToPoint: 方法。该方法翻译了 内容视图的边界矩形并通过复制优化重新显示为 大部分呈现的文档视图仍然可见,只询问 文档视图以绘制新暴露的区域。这通常会改善 滚动性能,但可能并不总是合适的。你可以转 使用NSClipView 方法setCopiesOnScroll: 关闭此行为 传递NO 作为参数。如果您确实保持滚动复制处于活动状态,请 确保使用NSView 以编程方式滚动文档视图 方法scrollPoint: 方法而不是translateOriginToPoint:

【讨论】:

  • 尝试在 IB 中设置它,它有点工作。将尝试结合使用并在 -drawRect 方法之外设置 documentView 框架。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多