我遇到了一些小类不确定的动画NSProgressIndicator
s。他们开始和停止动画没有任何问题。但是,如果在动画制作时将窗口最小化,则调用stopAnimation:
/StopAnimation(NSObject sender)
,如果窗口不可见,则可以节省资源。我认为这是从可可框架本身看着堆栈跟踪调用的。恢复NSProgressIndicator动画后窗口最小化,然后恢复
问题出现在窗口恢复时,动画未被恢复。
我已经看到了你可以使用NSCoding Protocol
并且可以覆盖encodeWithEncoder:
/EncodeTo(NSCoder encoder)
节省一些状态,然后使用保存的状态中initWithCoder:
/AppProgressIndicatorBar(NSCoder coder)
恢复。但这里的问题是我的encodeWithEncoder:
/EncodeTo(NSCoder encoder)
从未被调用过。
看着这个SO question和answer,如果对象需要序列化,应该自动处理它。所以我不确定它为什么不被调用。
同样的答案表明你可以用NSKeyedArchiver
明确地做到这一点,但后来我需要听NSWindowDelegate
来知道窗口何时最小化/恢复。在这种情况下,我可以使用这个,而不是使用NSCoding协议...
这只是感觉脏,我会想象这是一个非常普遍的情况。那么,你应该怎样/恢复动画?我是来自主要.NET背景的可可,我认为这个问题是我有限的可可知识的一个症状。
我使用Xamarin Mac,并试图给Objective-C和C#方法签名。我很乐意为其提供解决方案,我将能够(希望!)将其转换为C#等价物。
为了完整起见,这里是我当前使用NSCoder协议的Xamarin Mac子类,其中EncodeTo
未被调用。我正在运行OS X 10.11.3和Xamarin Studio 5.10.2。
[Register("AppProgressIndicatorBar")]
public class AppProgressIndicatorBar : NSProgressIndicator, INSCoding
{
...
public AppProgressIndicatorBar(NSCoder coder) : base(coder)
{
...
}
...
public override void EncodeTo(NSCoder encoder)
{
base.EncodeTo(encoder);
...
}
...
}