Как я могу отключить анимацию Какао по умолчанию при отображении модального листа? - PullRequest
4 голосов
/ 06 августа 2010

Я бы хотел отключить анимацию, которую выполняет Какао при отображении модального листа.

Apple Руководство по программированию листов состояния:

... ДругоеПоведение листа, такое как анимация, когда оно появляется и закрывается, обрабатывается автоматически набором приложений.

Но оно не дает никаких подсказок о том, как отключить этот эффект.

Я создал пользовательский лист (подкласс NSWindow с прозрачным фоном и некоторыми элементами управления в нем).Я могу отобразить его, используя стандартный метод beginSheet, следующим образом:

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

Лист отображается нормально, но проходит анимацию при его появлении и снова при закрытии.

Примечание: Я пишу полностью настроенный пользовательский интерфейс для приложения с сенсорным экраном или киоском, поэтому ни одно из обычных руководств по пользовательскому интерфейсу Apple не применимо.

Ответы [ 3 ]

1 голос
/ 06 августа 2010

Существует пользовательское значение по умолчанию для скорости анимации листов. Найдите его и посмотрите, что произойдет, если вы попытаетесь установить его на 0.

1 голос
/ 06 августа 2010

Это дикое предположение (мне лень это пробовать), но анимация может быть обработана с использованием Core Animation. Если это так, вы можете сделать это:

[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithBool: YES]
    forKey: kCATransactionDisableActions ];
[NSApp beginSheet:myCustomSheet
   modalForWindow:mainWindow
    modalDelegate:self
   didEndSelector:...];
[CATransaction commit];
0 голосов
/ 04 ноября 2018

Переопределить animationResizeTime: в NSWindow, которое вы представляете как лист, и оно возвращает 0. Это лучше, чем возиться с CATransaction (которая, кажется, не работает надежно) или NSWindowResizeTime (которая влияет на все окна).

...