gpt4 book ai didi

swift - 在自定义单元格中显示进度指示器的 Swift macOS 应用程序中,是否可以同步所有指示器的旋转?

转载 作者:行者123 更新时间:2023-11-30 10:31:51 24 4
gpt4 key购买 nike

我有一个用 Swift/Objective-C 编写的 Cocoa 应用程序,我有一个问题,这只是一个细节,但我认为它很重要。我有一个基于 View 的 NSOutlineView,由数据源和委托(delegate)驱动,并且我创建了一个自定义 NSTableViewCell,其中仅包含旋转进度指示器。问题是,当应用程序窗口打开时,只有可见的旋转指示器同步旋转。如果我放大窗口并显示更多 NSOutlineView 单元格,则新出现的旋转指示器不会同步旋转。这在逻辑上是正确的,因为我在 NSOutlineView 委托(delegate)方法中实例化了单元格:

outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView?

我的代码如下:

let view = outlineView.makeView(withIdentifier:NSUserInterfaceItemIdentifier.init("activityProgressTableViewCell"), owner: self) as! ProgressIndicatorTableCellView

view.unFinishedStatusIndicator.startAnimation(self)

所以我认为指标不同步是正常的,因为它们在不同时刻开始旋转。有人可以建议一种模式来解决这个问题吗?任何帮助是极大的赞赏。谢谢。

附注我知道我可以使用 Cocoa Bindings 而不是在指示器上调用 startAnimation,这可以让我一次启动所有指示器的动画,但是如何处理 NSOutlineView 中子项中的旋转指示器?

最佳答案

好吧,我确实通过使用 Cocoa Bindings 找到了一个可能的解决方案。在我的主 Controller 类中,我声明了一个如下属性:

@objc dynamic var shouldStartFoldersIndicators: Bool = true

然后,在界面生成器中,我将单元格中进度指示器的动画绑定(bind)绑定(bind)到主 Controller 的该路径。然后,在这个委托(delegate)方法中:

outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView?

当我需要显示旋转指示器单元格时,我将 Bool 属性设置为 false,然后设置为 true。不幸的是,这不起作用:

self.shouldStartFoldersIndicators = false
self.shouldStartFoldersIndicators = true

为了使其工作,我必须将语句推迟到下一个运行循环,如下所示:

DispatchQueue.main.async {
self.shouldStartFoldersIndicators = false
DispatchQueue.main.async {
self.shouldStartFoldersIndicators = true
}
}

这效果很好,尽管我担心它会减慢 NSOutlineView 重绘的速度。我预先感谢您提供更好的解决方案。谢谢

关于swift - 在自定义单元格中显示进度指示器的 Swift macOS 应用程序中,是否可以同步所有指示器的旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59011105/

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