我的NSWindowController
包含多个NSViewController
。 windowController将第一个viewController的视图显示为主窗口的子视图。
在按钮上单击windowController将下一个viewControllers视图添加为subView,添加一些布局约束并设置它们的动画,以便第一个视图移出并且下一个视图移入。动画后,第一个视图将从其superView中删除。
[nextController setLeftLayoutConstraint:nextLeft];
// ^^^^^^^^^^^^^^^^^^^^^^^ custom category'd property
[containerView addSubview:nextView];
[containerView addConstraints:@[nextWidth, nextHeight, nextTop, nextLeft]];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[context setDuration:0.5];
[[nextLeft animator] setConstant:[self leftOffset]];
[[[[self currentViewController] view] animator] setAlphaValue:-0.25]; // negative alpha to shift the timing
[[[[self currentViewController] leftLayoutConstraint] animator] setConstant:-NSWidth(containerView.frame)];
// ^^^^^^^^^^^^^^^^^^^^ custom category'd property
} completionHandler:^{
[[[self currentViewController] view] setAlphaValue:1.0];
[[[self currentViewController] view] removeFromSuperview];
[[self currentViewController] removeFromParentViewController];
_currentViewController = nextController;
}];
现在第二个视图比第一个视图高得多,所以它也会改变窗口高度。
不幸的是,这个窗口框架更改没有动画,并且窗口以正确的大小弹出丑陋。
我尝试先获取下一个视图,然后设置所有约束或类似内容的动画。不幸的是,在动画完成之前,视图的大小不正确。
有没有办法为窗口更改设置动画?