0

我有 vc1.view 覆盖整个屏幕,我希望能够使 vc1.view 变暗,并让 vc2.view 放大整个屏幕。

我的应用程序中没有任何导航控制器,那么实现我的目标的最佳做法是什么?我正在考虑的解决方案是:

  • 将 vc1.view 和 vc2.view 添加到公共容器视图中
  • 使用【UIView transitionFromView:vc1.view toView:vc2.view ......】

我不喜欢必须将不同 vc 的视图添加到公共容器视图中的想法。有什么建议么?提前致谢。

4

2 回答 2

2

您可以使用 transitionFromView:toView:... 而不将新视图添加到公共容器,因为该转换方法负责添加视图。以下对我有用。代码位于视图控制器中,其视图是“来自视图”。我在这里使用交叉淡入淡出,但您可以将其更改为任何其他可用方法:

-(void)switchViews:(id)sender {
    UIWindow *win = self.view.window;
    YellowController *yellow = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
    yellow.view.frame = self.view.frame;
    [UIView transitionFromView:self.view toView:yellow.view duration:2 options:UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished) {
        win.rootViewController = yellow;
    }];
}

但是,要进行自定义转换,您必须将新视图添加为“来自视图”所在的任何视图的子视图(我认为)。在这个例子中,这是窗口的视图。此代码从旧视图的中心生成新视图,而该视图淡出。在转换结束时,视图控制器切换到拥有新视图的控制器(在这种情况下为黄色)

编辑后:我将此方法更改为使用 CGAffineTransform (感谢 jrturton 在回答我的问题时提出的建议):

-(void)switchViews3:(id)sender {
    UIWindow *win = self.view.window;
    YellowController *yellow = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
    yellow.view.frame = self.view.frame;
    yellow.view.transform = CGAffineTransformMakeScale(.1, .1);
    [win addSubview:yellow.view];

    [UIView animateWithDuration:.6 animations:^{
        yellow.view.transform = CGAffineTransformIdentity;
        self.view.alpha = 0;
    }
                 completion:^(BOOL finished) {
                     [self.view removeFromSuperview];
                     win.rootViewController = yellow;
                 }];

}

于 2012-12-15T00:49:29.110 回答
1

要在没有导航控制器的情况下从 vc1 呈现到 vc2,请使用

[vc1 presentViewController:vc2 animated:YES completion:nil];

为了改变呈现风格,Apple 提供了一些。您只需要在调用上述代码之前进行设置:

vc2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

这是列表:

typedef enum {
   UIModalTransitionStyleCoverVertical = 0,
   UIModalTransitionStyleFlipHorizontal,
   UIModalTransitionStyleCrossDissolve,
   UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;
于 2012-12-15T00:35:03.980 回答