gpt4 book ai didi

swift - NSTableView 动画不一致

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:12 27 4
gpt4 key购买 nike

我有一个 NSTableView,它会间歇性地停止动画并正确更新自身,从而导致糟糕的用户体验。

let oldRows = filteredDocuments
let newRows = newFilteredDocuments
let diff = oldRows.diff(newRows)
filteredDocuments = newFilteredDocuments

if (diff.results.count > 0) {
let deletionIndexPaths = NSMutableIndexSet()
diff.deletions.forEach { deletionIndexPaths.addIndex($0.idx) }
let insertionIndexPaths = NSMutableIndexSet()
diff.insertions.forEach { insertionIndexPaths.addIndex($0.idx) }

self.tableView?.beginUpdates()
self.tableView?.removeRowsAtIndexes(deletionIndexPaths, withAnimation: NSTableViewAnimationOptions.EffectFade)
self.tableView?.insertRowsAtIndexes(insertionIndexPaths, withAnimation: NSTableViewAnimationOptions.SlideLeft)
self.tableView?.endUpdates()
}

它何时停止动画似乎没有逻辑,而且在我完成的许多测试中,感觉它几乎与构建相关。有趣的是,当我进行分析时它永远不会停止动画...

就好像主线程上的某些东西阻塞了 UI,然后 NSTableView 超时并取消更新 - 但我不知道如何调试它。

最佳答案

如果先做一个再做另一个怎么样?我最近在需要插入单元格和滚动时做了类似的事情,这导致了糟糕的用户体验。解决方案是增加一点延迟。不确定这是否是您要根据小代码片段完成的目标,但我们开始吧:

let oldRows = filteredDocuments
let newRows = newFilteredDocuments
let diff = oldRows.diff(newRows)
filteredDocuments = newFilteredDocuments

if (diff.results.count > 0) {
let deletionIndexPaths = NSMutableIndexSet()
diff.deletions.forEach { deletionIndexPaths.addIndex($0.idx) }
let insertionIndexPaths = NSMutableIndexSet()
diff.insertions.forEach { insertionIndexPaths.addIndex($0.idx) }

self.tableView?.beginUpdates()
self.tableView?.removeRowsAtIndexes(deletionIndexPaths, withAnimation: NSTableViewAnimationOptions.EffectFade)
self.tableView?.endUpdates()

let delay = 0.35
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))) // Hate this syntax
dispatch_after(delay, dispatch_get_main_queue(), { [weak self] in
self?.tableView?.beginUpdates()
self?.tableView?.insertRowsAtIndexes(insertionIndexPaths, withAnimation: NSTableViewAnimationOptions.SlideLeft)
self?.tableView?.endUpdates()
})
}

关于swift - NSTableView 动画不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731686/

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