我遇到了一些小類不確定的動畫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);
...
}
...
}