NSWindow动画大小改变了自动布局的新子视图

时间:2015-04-29 01:38:25

标签: objective-c macos animation autolayout nswindow

我的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;
}];

现在第二个视图比第一个视图高得多,所以它也会改变窗口高度。

不幸的是,这个窗口框架更改没有动画,并且窗口以正确的大小弹出丑陋。

我尝试先获取下一个视图,然后设置所有约束或类似内容的动画。不幸的是,在动画完成之前,视图的大小不正确。

有没有办法为窗口更改设置动画?

0 个答案:

没有答案