【发布时间】:2011-08-31 15:22:04
【问题描述】:
NSProgressIndicator 具有称为 startAnimation: 和 stopAnimation: 的方法,但我找不到检查状态的方法(当前是否正在动画)。你会怎么做?
【问题讨论】:
标签: objective-c cocoa macos nsprogressindicator
NSProgressIndicator 具有称为 startAnimation: 和 stopAnimation: 的方法,但我找不到检查状态的方法(当前是否正在动画)。你会怎么做?
【问题讨论】:
标签: objective-c cocoa macos nsprogressindicator
您不应该将控件的状态存储在控件本身中。
进度指示器控件不提供对其动画状态的访问,因为与文本字段之类的东西不同,用户无法更改控件的状态。如果您的代码没有启动它,您将永远不会处于控件状态更改的情况。因为你是设置它的状态的人,所以你应该跟踪它。
Cocoa 使用模型-视图-控制器模式,进度指示器是一个视图。如果您将状态存储在控件中,那么您就违反了 MVC 模式。
您的视图应始终反映您的模型,并且控制器在那里确保视图和模型保持同步。
您应该使用 Cocoa Bindings 将进度指示器的动画状态绑定到存储在模型中的 BOOL(首选),或者在控制器类中实现代码以控制进度指示器的动画状态更改为存储在模型中的BOOL。
【讨论】:
NSProgressIndicator 似乎没有 isAnimating 属性(至少我在文档中找不到),因此无法为此使用 Cocoa 绑定: (
animate 属性。
您可以在类中的某个位置保留一个 BOOL 值,当您分别启动和停止动画时将其设置为 YES 或 NO。
【讨论】: