如何检查 NSProgressIndicator 当前是不是为动画?

Posted

技术标签:

【中文标题】如何检查 NSProgressIndicator 当前是不是为动画?【英文标题】:How to check if a NSProgressIndicator is currently animated?如何检查 NSProgressIndicator 当前是否为动画? 【发布时间】:2011-08-31 15:22:04 【问题描述】:

NSProgressIndicator 具有称为 startAnimation:stopAnimation: 的方法,但我找不到检查状态的方法(当前是否正在动画)。你会怎么做?

【问题讨论】:

【参考方案1】:

您不应该将控件的状态存储在控件本身中。

进度指示器控件不提供对其动画状态的访问,因为与文本字段之类的东西不同,用户无法更改控件的状态。如果您的代码没有启动它,您将永远不会处于控件状态更改的情况。因为你是设置它的状态的人,所以你应该跟踪它。

Cocoa 使用模型-视图-控制器模式,进度指示器是一个视图。如果您将状态存储在控件中,那么您就违反了 MVC 模式。

您的视图应始终反映您的模型,并且控制器在那里确保视图和模型保持同步。

您应该使用 Cocoa Bindings 将进度指示器的动画状态绑定到存储在模型中的 BOOL(首选),或者在控制器类中实现代码以控制进度指示器的动画状态更改为存储在模型中的BOOL

【讨论】:

NSProgressIndicator 似乎没有 isAnimating 属性(至少我在文档中找不到),因此无法为此使用 Cocoa 绑定: ( 这是animate 属性。【参考方案2】:

您可以在类中的某个位置保留一个 BOOL 值,当您分别启动和停止动画时将其设置为 YESNO

【讨论】:

我可以。但我宁愿不继承我使用的所有 Cocoa 类 :) 为什么要对所有这些子类化?你不能在你的委托类或其他东西中保留一个 BOOL 属性吗?还是您有多个进度指示器? 我有不止一个,是的。此外,每个对象都应保留有关其自身状态的信息,而不是外部类。

以上是关于如何检查 NSProgressIndicator 当前是不是为动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSProgressIndicator 颜色从灰色更改为白色? [复制]

OS X 停靠图标中的 NSProgressIndicator 显示为灰色,如何制作标准蓝色

子类 NSProgressIndicator

NSProgressIndicator 的 setControlTint 没有效果

NSButton 中的 NSProgressIndicator

NSCell 子类化:绘制 NSProgressIndicator?