【发布时间】:2015-09-26 12:01:53
【问题描述】:
我有一个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 的视图 -
在切换弹出框的
contentViewController之前淡出第一个VC的视图层: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;
第二个策略在切换视图控制器之前不会等待动画完成。
如何以动画方式更改 NSPopover 的 contentViewController?
【问题讨论】:
标签: objective-c macos cocoa core-animation nspopover