【问题标题】:NSScrollView with sticky top, left and bottom 'headers'具有粘性顶部、左侧和底部“标题”的 NSScrollView
【发布时间】:2012-09-15 15:59:37
【问题描述】:

我正在尝试在 Cocoa 中创建时间线控件。 This is what I am trying to achieve.基本上是标准的时间线设计。

但是,我不知道该采取哪种方法。问题在于顶部标尺、左侧轨道列表和底部音频波形显示。这三个部分需要始终可见并“粘”在边缘。标尺和音频波形只能水平滚动,而左侧的曲目列表只能垂直滚动。

对于顶部的标尺,NSRulerView 似乎很合适,因为它只是一个标尺。

对于左视图和底视图,我不知道该走哪条路线。 I've played with using a wide vertical NSRulerView for the track list. 这可行,但会产生其他问题。例如:顶部标尺出现在曲目列表上方。

到目前为止,我已经编写了四个选项:

  1. 忘记 NSRulerView 并在文档视图中自定义绘制所有内容。这似乎可行,但在 NSRulerView 函数中构建了回避。另外,我需要找到一种方法来缩短滚动条,这样它们就不会与侧视图和顶视图重叠。

  2. 在顶部和左侧使用 NSRulerViews。然后可能会在文档视图中手动绘制底部。

  3. 将左视图放在滚动视图之外,并通过将其链接到主滚动视图来手动上下滚动。顶部使用 NSRulerView,在文档视图中手动绘制音频波形。

  4. 嵌入在另一个 NSScrollView 中的 NSScrollView。外部处理水平滚动,内部滚动视图处理垂直滚动。我认为可能,但它看起来很老套。

所以我的问题归结为:走哪条路线?任何人都可以阐明这个问题并指出正确的方向吗?

【问题讨论】:

    标签: cocoa nsview drawrect nsscrollview


    【解决方案1】:

    我的理解:

    • 你想要一个 NSScrollView 左侧的视图,它与 NSScrollView 一起垂直滚动,同时忽略水平滚动。

    • 你想要一个 NSScrollView 下方的视图,它会随着 NSScrollView 水平滚动而忽略垂直滚动。

    • 你想要统治者。

    要完成这个任务:

    • 使用 3 个不重叠且不相互继承的独立滚动视图。

    • 在您希望它们出现的任何视图中激活标尺。

    • 同步滚动视图(这样当一个滚动时,另一个相应地滚动)。

    如何同步滚动视图在帮助中。请参阅用户体验 > 控件 > Scroll View Programming Guide for Mac > Synchronizing Scroll Views。这也间接链接在 NSScrollView 帮助指南的标题中。

    如果您希望三个滚动视图包含在 NSSplitView 中以简化调整大小,则必须添加第四个视图以占用未使用的角(放置控件的好地方)。由于 NSSplitView 只能垂直或水平拆分,因此您必须创建一个包含 2 个拆分视图的 NSSplitView,其中每个拆分视图包含您实际看到的 2 个视图(沿一个方向拆分,然后沿另一个方向拆分)。拆分视图的大小调整必须以类似于滚动同步的方式进行同步,以保持所有四个视图的直线交叉。

    【讨论】:

    • 感谢您的回答。你理解的没错。三个独立的滚动视图是另一个有趣的想法。我会尝试看看我是如何工作的。与此同时,我把这个问题留着,看看其他人是否有其他建议。如果没有其他人回应,我会接受你的回答。
    • 标尺不能直接用scrollView的documentView滚动吗?我问是因为随着响应式滚动的出现,上面建议的同步滚动会出现轻微的延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2012-05-02
    • 1970-01-01
    • 2013-10-19
    • 2021-06-14
    相关资源
    最近更新 更多