У меня есть NSPopover
, который переключается между двумя контроллерами представления.
Я установил один при запуске,
self.popover.contentViewController = viewController1;
и я перехожу на другой в зависимости от действия пользователя:
self.popover.contentViewController = viewController2;
AppKit делает некоторые анимации для самого NSPopover
, чтобы приспособить второй VC, которые работают хорошо, но переход между двумя представлениями View Controller вызывает раздражение. Я бы хотел, чтобы они входили и выходили горизонтально или, по крайней мере, пересекались.
Я использую представления с поддержкой слоев, которые я устанавливаю следующим образом в методе AppDelegate
applicationDidFinishLaunching
:
self.popover.contentViewController.view.wantsLayer = YES;
self.popover.contentViewController.view.layerContentsRedrawPolicy = NSViewLayerContentsRedrawOnSetNeedsDisplay;
Вот что я пробовал:
- затухание представления первого контроллера представления в
-viewWillDisappear
и затухание представления второго контроллера представления в-viewWillAppear
. Это немедленно затухает вид первого VC и не возвращает вид второго VC обратно. затухание слоя представления первого VC перед переключением всплывающего окна
contentViewController
:CALayer *theLayer = self.popover.contentViewController.view.layer; CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"]; fadeAnim.fromValue = [NSNumber numberWithFloat:1.0]; fadeAnim.toValue = [NSNumber numberWithFloat:0.0]; fadeAnim.duration = 1.0; [theLayer addAnimation:fadeAnim forKey:@"opacity"]; theLayer.opacity = 0.0; self.popover.contentViewController = self.viewController;
Эта вторая стратегия не ждет завершения анимации перед переключением контроллеров представления.
Как анимировать изменение contentViewController
NSPopover?