问题标签 [nsclipview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - 如何让 NSScrollView 在 10.9 及更高版本中居中文档视图?
有很多关于如何让 NSScrollView 使其文档视图居中的示例。这里有两个例子(它们非常相似,以至于有人在没有注明出处的情况下复制某人,但重点是如何存在。) http://www.bergdesign.com/developer/index_files/88a764e343ce7190c4372d1425b3b6a3-0.html https://github .com/devosoft/avida/blob/master/apps/viewer-macos/src/main/CenteringClipView.h
这通常通过继承 NSClipView 和覆盖来完成:
- (NSPoint)constrainScrollPoint:(NSPoint)newOrigin;
但此方法在 Mac OS X 10.9 + 中已弃用
我们现在能做什么?哦不~!
macos - 悬垂子视图被创建两次异常 MAC
我在 MAC 中遇到了这个异常,我在一个窗口中创建了两个选项卡视图项。每个选项卡都有一个表格视图。我搜索了很多,但没有看到任何灵魂?有谁能够帮助我 ?
objective-c - NSScrollView 混乱
请原谅我这是一个关于NSScrollView
课程的相当模糊的问题。尽管已经阅读了很多内容,但我并没有真正理解它们。
我有一个NSViewController
子类,它有一个xib
. 在这个视图中,我加入了一个NSScrollView
. IBOutlet
我从视图控制器类连接一个。
这就是我感到困惑的地方。
NSScrollView
documentView
和 和有什么不一样clipView
?当xib
在滚动视图中添加时,会给出一个NSClipView
. 为什么?
如果我想在 中的滚动视图中添加子视图xib
,我只能将视图放入NSClipView
中,NSScrollView
而不是直接放入滚动视图。我还看到,当我调整它的大小时NSClipView
,它会剪辑我放入的子视图,滚动条出现在滚动视图上。但是,当我运行我的应用程序时,我无法滚动。其次,当应用程序运行时,子视图不会出现。
有人能解释一下 NSScrollView 是如何工作的吗?到目前为止,我读到的所有内容都没有让我点击它。
cocoa - 如何在 NSScrollView 中控制 NSTableView 的绘制?
无论水平滚动条位置如何,如何让 NSTableView 始终显示相同的列?在最右边的可见列中,我有自定义单元格视图。我希望水平滚动条控制在这些自定义视图中绘制的内容。垂直滚动应该可以正常工作。
我尝试了几种方法,但没有取得多大成功。例如,我可以控制水平滚动条的旋钮比例,方法是让表格视图更宽,或者让滚动视图认为它的文档视图实际上比实际更宽。一种方法是继承 NSClipView 并覆盖 -documentRect ,如下所示:
然而,虽然滚动旋钮看起来应该是这样,并且我可以在不移动表格视图的情况下向右拖动它,但当我开始向另一个方向滚动时,旋钮会返回到左边缘。我也有无法让水平滚动条自动出现的问题。原始类也会发生这种情况,而不仅仅是我的自定义剪辑视图。这些问题可能相关吗?
我还尝试用自定义视图替换文档视图,该视图充当剪辑视图和表格视图之间的代理。它的 -drawRect: 调用 table view 的 -drawRect:。但是,没有绘制任何内容。我想这是因为表视图现在没有超级视图。如果表视图作为子视图添加到此代理视图中,它会随之移动。我如何使它在水平轴上静止?
所以,重申一下:
- 使表格视图可滚动的最佳方法是什么,同时无论水平滚动条位置如何,始终显示相同的列?
- 获得滚动条位置和旋钮比例的最佳方法是什么?我应该为 NSClipView 的 NSViewBoundsDidChangeNotification 添加一个观察者吗?
nsview - 如何使用 NSView 的 prepareContentInRect 控制滚动视图过度绘制?
我试图更好地了解它的用法,以提高 OSX 的滚动性能。更具体地说,我试图消除屏幕侧面的“闪烁/闪烁”,因为您快速滚动并且 AppKit 遇到您的视图的非过度绘制(未准备)部分或您的视图部分准备不正确仅限背景。
我的理解是preparedContentRect 代表滚动视图的过度绘制部分-可用于响应式滚动的区域。
第一部分
preparedContentInRect
我在两个子视图中放置了代码NSScrollView
- 每个子视图都是浮动子视图,NSScrollView
它们在滚动时的行为与 documentViews 相同。
在程序启动后(如预期的preparedContentInRect
那样)被调用了几次。然后我滚动到准备区域的末尾,但是(出乎意料地)它没有被再次调用,因为我越来越接近,甚至在准备区域的边缘。为什么不?即使没有用户与 UI 交互(系统空闲),它也不会调用preparedContentInRect
动态扩大过度绘制区域。
第二部分
因为(如上所述)我不能preparedContentInRect
在需要时依赖 AppKit 调用;我重新组织了我的代码以准备preparedContentRect
来自剪辑视图的每个通知boundsChangeNotification
,然后prepareContentInRect
手动调用以通知 AppKit 新的透支区域。
我已经包含了一个“手动”标志,以便我的自定义覆盖可以区分我对 AppKit 的手动调用prepareContentInRect
和内部调用 - 以免让 AppKit 搞砸透支!!!
不幸的是,即使prepareContentRect
正在报告我打算准备的矩形,当它滚动时它似乎并没有按照我的预期准备矩形 - 它准备了一个 3,500 点宽而不是 5,040 点宽的矩形,因此我在等待时遇到了可怕的背景颜色用于渲染视图的其余部分。
视图唯一没有得到正确过度绘制的“特殊”事情是它有很多子视图已经使用canDrawSubviewsIntoLayer
.
prepareContentInRect
关于透支,我在上面有什么误解?为什么 AppKit 的行为如此?
macos - 为什么我的 NSClipView 子类以黑色背景绘制,除非我指定 isOpaque NO?NSClipView 本身不这样做
我想在 Cocoa 中创建任意画布;也就是说,一个可以绘制整个可见区域的绘图区域,并且程序员选择了滚动限制,并且对我是否可以在整个可见区域上绘制没有影响。这类似于我在 Windows 和 GTK+ 上执行此操作的方式,与标准 NSScrollView 的不同之处在于 a) 我仅在可见区域中绘制(因此 (0, 0) 是可见区域的原点,而不是整个文档)和b)我不限于文档视图框架(因此,如果文档视图小于可见区域,我仍然可以在可见区域中绘制所有内容)。
为此,我正在实现 NSClipView 的一个子类来进行绘图,并仅使用 NSScrollView 的文档视图来设置滚动范围。
当我drawRect:
在 NSClipView 中覆盖时,剪辑视图的背景变为黑色。方法可以是空的,可以是 defer to super
,也可以是绘制任何东西;结果是一样的。只有通过省略drawRect:
才能绘制正确的白色背景颜色。
现在,正如这里所暗示的(即使它是关于 iOS 我假设模型足够相似,以至于该解决方案也可以在 OS X 上运行),如果我覆盖isOpaque
返回NO
,则背景绘制正确。为什么?NSClipView 有什么不同之处在于它可以YES
在仍然绘制背景的同时返回?
还是我实现此滚动视图的方法错误?
谢谢。
swift - 无法在 NSClipView 中正确堆叠视图
我对这段代码很生气,因为它只显示了最后一个视图(在它的正确位置)并且忘记了绘制其他视图......
你能帮我找出问题吗?
nsscrollview - NSScrollView 和 copyOnScroll 行为
我试图了解copyOnScroll 在典型的 NSScrollView/NSClipView/NSView 设置中的行为。我将自始至终将 NSView 或 documentView 称为 MyCustomView,并注意这是一个大视图,可能需要大量时间来绘制(我实际上是在示例应用程序中执行此操作,以更好地理解此处的所有各种问题) . 另请注意,我目前正在研究“非层支持案例”,而不是选择响应式滚动。假设视图是 10,000 x 800 单位。还假设这个滚动视图占据了整个窗口,我们只是在一个 1,500 x 800 的窗口中查看 MyCustomView 的开始部分(所以我们正在查看 rect (l: 0, t:0, r:1500, b:800))。现在让我们将所有内容向左滚动 500,以便我们现在查看 (l:500, t:0, r:2000, b:800)。在这样的卷轴中,
根据copyOnScroll上的Apple文档:
当此属性的值为 YES 时,剪辑视图在滚动时复制其现有的渲染图像(仅绘制其文档视图的暴露部分);当它为 NO 时,视图会强制每次重绘其内容。
值得一提的是,当我们的应用程序(真正的应用程序,而不是这个示例应用程序)曾经是基于 Carbon 的应用程序时,这是我们在滚动时看到的行为,更新区域将仅包含可见区域的新暴露部分。
为了进一步了解这种行为,我用 MyScrollView/MyClipView 子类替换了设置的 NSScrollView/NSClipView 部分。覆盖一些例程并仅调用 super 以了解谁在调用各种更新例程(如 setNeedsDisplay 或 setNeedsDisplayInRect :) 我发现以下内容:
单击滚动条开始向右滚动时,我收到以下对 MyClipView::setNeedsDisplayInRect:(NSRect)invalidRect 的调用: invalidRect NSRect (origin = (x = 0, y = 0), size = (width = 0) , height = 0))
invalidRect NSRect (origin = (x = 0, y = 0), size = (width = 0, height = 0))
然后: invalidRect NSRect (origin = (x = 180.5, y = 0), size = (width = 460, height = 363))
这显然是由于 translateOriginToPoint 调用而使整个 visibleRect 失效。这是堆栈:
然后: invalidRect NSRect (origin = (x = 460, y = 0), size = (width = 180.5, height = 363))
这看起来像是要绘制的正确的新“显示”部分。这是堆栈:
然后还有 3 个: invalidRect NSRect (origin = (x = 0, y = 0), size = (width = 0, height = 0))
invalidRect NSRect (origin = (x = 0, y = 0), size = (width = 0, height = 0))
invalidRect NSRect (origin = (x = 0, y = 0), size = (width = 0, height = 0))
最终 MyCustomView drawRect 用dirtyRect调用:dirtyRect NSRect (origin = (x = 180.5, y = 0), size = (width = 460, height = 363)) 而不是期望的:dirtyRect NSRect (origin = (x = 460, y = 0), 大小 = (宽度 = 180.5, 高度 = 363))
所以知道为什么copysOnScroll不发送适当较小的dirtyRect(或通过getRectsBeingDrawn的较小矩形列表)吗?这种额外的绘图会在实际应用程序中导致严重的性能问题。