4

我想禁用 Cocoa 在显示模式表时执行的动画。

Apple 的工作表编程指南指出:

... 其他工作表行为,例如出现和关闭时的动画,由 Application Kit 自动处理。

但它没有提供有关如何禁用此效果的任何提示。

我创建了一个自定义工作表(具有透明背景和一些控件的 NSWindow 的子类)。我可以使用标准的 beginSheet 方法显示它,如下所示:

[NSApp beginSheet:myCustomSheet
   modalForWindow:mainWindow
    modalDelegate:self
   didEndSelector:...];

工作表显示正常,但在出现时会播放动画,并在关闭时再次播放。

注意:我正在为触摸屏/信息亭类型的应用程序编写一个完全定制的用户界面,因此通常的 Apple 用户界面指南都不适用。

4

3 回答 3

2

This is a wild guess (I'm too lazy to try it) but the animation might be handled using Core Animation. If so, you might be able to do this:

[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithBool: YES]
    forKey: kCATransactionDisableActions ];
[NSApp beginSheet:myCustomSheet
   modalForWindow:mainWindow
    modalDelegate:self
   didEndSelector:...];
[CATransaction commit];
于 2010-08-06T01:36:13.410 回答
1

工作表的动画速度有一个用户默认值。查找它,看看如果您尝试将其设置为 0 会发生什么。

于 2010-08-06T10:05:19.453 回答
0

在您作为工作表呈现的 NSWindow 中覆盖animationResizeTime:并让它返回 0。这比弄乱 CATransaction (这似乎不能可靠地工作)或 NSWindowResizeTime (影响所有窗口)要好。

于 2018-11-04T01:06:52.940 回答