【问题标题】:How can I disable Cocoa's default animation when displaying a modal sheet?显示模态表时如何禁用 Cocoa 的默认动画?
【发布时间】:2026-01-20 03:20:07
【问题描述】:

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

Apple 的Sheet Programming Guide 声明:

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

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

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

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

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

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

【问题讨论】:

    标签: cocoa animation customization nswindow


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

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

      【讨论】:

        最近更新 更多