gpt4 book ai didi

cocoa - 窗口最小化后恢复 NSProgressIndicator 动画,然后恢复

转载 作者:行者123 更新时间:2023-12-03 17:48:43 26 4
gpt4 key购买 nike

我在处理某些子类不确定 NSProgressIndicator 的动画时遇到问题。他们可以毫无问题地开始和停止动画。但是,如果我在设置动画时最小化窗口,则会调用 stopAnimation:/StopAnimation(NSObject sender) ,如果窗口不可见,这对于节省资源是有意义的。我假设这是从 cocoa 框架本身查看堆栈跟踪调用的。

当窗口恢复时,问题就会出现,动画不会恢复。

我发现您可以使用 NSCoding Protocol并且可以覆盖 encodeWithEncoder:/EncodeTo(NSCoder编码器) 来保存一些状态,然后在 initWithCoder:/ 中使用保存的状态AppProgressIndicatorBar(NSCoder coder) 恢复。但这里的问题是我的 encodeWithEncoder:/EncodeTo(NSCoder编码器) 从未被调用过。

看看这个SO questionanswer ,如果对象需要序列化,应该自动处理。所以我不确定为什么它没有被调用。

同样的答案说你可以使用 NSKeyedArchiver 显式地执行此操作,但随后我需要使用 NSWindowDelegate 进行监听了解窗口何时最小化/恢复。在这种情况下,我可以只使用它,而不使用 NSCoding 协议(protocol)...

这感觉很脏,我想这是一个非常常见的场景。那么应该如何恢复动画呢?我是 cocoa 的新手,主要来自 .NET 背景,我认为这个问题是我对 cocoa 知识有限的症状。

我正在使用 Xamarin Mac,并尝试提供 Objective-C 和 C# 方法签名。我很高兴能找到其中任何一个的解决方案,我将能够(希望如此!)将其转换为 C# 等效项。

为了完整起见,这是我当前使用 NSCoder 协议(protocol)的 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);

...
}

...
}

最佳答案

您应该能够使用 NSWindowWillMiniaturizeNotificationNSWindowDidMiniaturizeNotificationNSWindowDidDeminiaturizeNotification 通知或 windowWillMiniaturize:windowDidMiniaturize:windowDidDeminiaturize: 窗口委托(delegate)方法,用于跟踪窗口的状态并在窗口缩小时恢复进度条的状态(这真的是一个词吗?)。

HTH

关于cocoa - 窗口最小化后恢复 NSProgressIndicator 动画,然后恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com