gpt4 book ai didi

cocoa - 如何在没有动画的情况下滚动RowToVisible

转载 作者:行者123 更新时间:2023-12-03 17:00:56 25 4
gpt4 key购买 nike

在 Mac 上,当按住向上或向下箭头时,Mail 和 Finder 的表格 View 上会出现稳定的滚动效果。行突出显示与列的顶部或底部齐平,并且行逐步通过,没有动画。

8年前好像是hard to not do this 。现在我似乎无法停止 NSOutlineView 上的 scrollRowToVisible 动画。

我尝试使用 NSAnimationContext.beginGrouping()CATransaction.begin() 等包装调用,以将任何动画持续时间设置为 0.0但运气不佳。

无论如何,有没有办法让这个调用变得简单——或者我应该使用一些更低级别的东西?

编辑

这是我的代码。持续时间在这里没有影响。总是有几帧滚动动画,并且动画的端点稍微不规则(即滚动到 View 的底部边缘并不总是与底部边缘对齐)。

if selectedRows != outlineView.selectedRowIndexes {
outlineView.selectRowIndexes(selectedRows, byExtendingSelection: false)

// I would love this not to animate like in mail, but it cannot be stopped!!!
if selectedRows.one {
NSAnimationContext.beginGrouping()
NSAnimationContext.current.allowsImplicitAnimation = false
NSAnimationContext.current.duration = 0
outlineView.scrollRowToVisible(selectedRows.first!)
NSAnimationContext.endGrouping()
}
}

使用 runAnimationGroup 具有相同的结果:

NSAnimationContext.runAnimationGroup( { current in
current.allowsImplicitAnimation = false
current.duration = 0
outlineView.scrollRowToVisible(selectedRows.first!)
}, completionHandler: nil)

我的表格中有可变高度的行,但我不明白为什么这会产生影响。从上面的代码中,选择的变化总是在表格中的任何移动之前突出显示,进一步表明滚动动画没有被删除。

最佳答案

我自己也遇到了这个问题,并通过子类化 NSClipView 并覆盖 funcscroll(to newOrigin: NSPoint) 解决了它,如下所示:

override func scroll(to newOrigin: NSPoint) {
super.setBoundsOrigin(newOrigin)
}

这应该完全禁用平滑滚动,这是您所描述的动画效果,用于容纳子类剪辑 View 的 ScrollView 。

关于cocoa - 如何在没有动画的情况下滚动RowToVisible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57070733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com