如何在显示模态表时禁用Cocoa的默认动画?

时间:2010-08-06 00:58:20

标签: cocoa animation customization nswindow

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

Apple的Sheet Programming Guide州:

  

...其他工作表行为,例如动画出现和被解散时,由应用程序工具包自动处理。

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

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

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

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

注意:我正在为触摸屏/自助服务终端类型应用编写完全自定义的用户界面,因此没有适用的常用Apple用户界面指南。

3 个答案:

答案 0 :(得分:1)

这是一个疯狂的猜测(我太懒了,不能尝试),但可以使用Core Animation处理动画。如果是这样,您可以这样做:

[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithBool: YES]
    forKey: kCATransactionDisableActions ];
[NSApp beginSheet:myCustomSheet
   modalForWindow:mainWindow
    modalDelegate:self
   didEndSelector:...];
[CATransaction commit];

答案 1 :(得分:1)

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

答案 2 :(得分:0)

在要显示为工作表的NSWindow中覆盖animationResizeTime:,并使其返回0。这比弄乱CATransaction(似乎无法可靠工作)或NSWindowResizeTime(会影响所有窗口)要好。