【发布时间】:2016-03-02 23:14:14
【问题描述】:
我遇到了一些子类不确定NSProgressIndicators 的动画问题。他们开始和停止动画没有任何问题。但是,如果我在制作动画时最小化窗口,则会调用 stopAnimation: / StopAnimation(NSObject sender),如果窗口不可见,这对于节省资源是有意义的。我假设这是从可可框架本身查看堆栈跟踪调用的。
然后当窗口恢复时出现问题,动画没有恢复。
我看到您可以使用NSCoding Protocol 并可以覆盖encodeWithEncoder: / EncodeTo(NSCoder encoder) 来保存一些状态,然后使用initWithCoder: / AppProgressIndicatorBar(NSCoder coder) 中保存的状态来恢复。但这里的问题是我的encodeWithEncoder: / EncodeTo(NSCoder encoder) 从未被调用过。
看这个SOquestion和answer,如果对象需要序列化应该自动处理。所以我不确定为什么它没有被调用。
同样的答案说你可以用NSKeyedArchiver 明确地做到这一点,但是我需要用NSWindowDelegate 来听才能知道窗口何时最小化/恢复。在这种情况下,我可以只使用它,而不使用 NSCoding 协议...
这只是感觉很脏,我想这是一个非常常见的场景。那么应该/如何恢复动画?我是 cocoa 的新手,主要来自 .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);
...
}
...
}
【问题讨论】:
标签: cocoa xamarin xamarin.mac