在一个视图控制器内切换多个视图

时间:2014-05-29 16:25:30

标签: ios uiview

我将以几种不同的方式提出我的问题,希望能更好地了解我所提出的问题,因为这看起来很混乱。我也在发布我正在尝试做的解释。

首先,如何在一个视图控制器中切换多个视图?

其次,如果我有四个视图(A,B,C和D),我如何才能看到视图A可见,当选择视图A上的按钮时,它将淡出到所选视图中,例如我可能有一个按钮"按钮B"当按下此按钮时,视图A将淡出(参见下面的代码),视图B将变为可见。

我不想要任何"黑屏"动画要发生(这就是为什么我没有使用多个视图控制器),我希望视图切换在后台完成并让菜单(视图A)一直可见,然后菜单将在视图中淡出(视图B,C或D)已切换。

为了让您了解我如何使用此功能,我有以下解释:

目前我有一个视图,菜单会以捏合淡入,并以相反的姿势淡出。我希望将此功能连接到一个控制器内的多个视图,以便我可以无缝地淡入和淡出菜单到不同的视图。这是我所说的一步一步的过程:

  1. 捏 - 淡入菜单
  2. 菜单上的按钮
  3. 切换视图,但留在菜单中。
  4. 淡出菜单进入新视图。
  5. 我有菜单淡入和淡出的代码,让你知道我在说什么:

    - (IBAction)ChangeAlpha:(UIPinchGestureRecognizer*)sender {
    
    
    sender.scale = MIN(sender.scale, 62.5/_item1.frame.size.height);
    sender.scale = MAX(sender.scale, 50/_item1.frame.size.height);
    
    _item1.transform = CGAffineTransformScale(_item1.transform, sender.scale, sender.scale);
    _item2.transform = CGAffineTransformScale(_item2.transform, sender.scale, sender.scale);
    _item3.transform = CGAffineTransformScale(_item3.transform, sender.scale, sender.scale);
    
    sender.scale = 1;
    
    menuAlpha = 5-((1/12.5)*_item1.frame.size.height);
    
    _item1.alpha = menuAlpha;
    _item2.alpha = menuAlpha;
    _item3.alpha = menuAlpha;
    _menuBackground.alpha = menuAlpha;
    
    if (sender.state == UIGestureRecognizerStateEnded) {
    
        if (menuAlpha < .5) {
    
            CGFloat scale = (280/_item2.frame.size.width);
            [UIView animateWithDuration:1-menuAlpha animations:^{
                _item1.transform = CGAffineTransformScale(_item1.transform, scale, scale);
                _item1.alpha = 0;
                _item2.transform = CGAffineTransformScale(_item2.transform, scale, scale);
                _item2.alpha = 0;
                _item3.transform = CGAffineTransformScale(_item3.transform, scale, scale);
                _item3.alpha = 0;
                _menuBackground.alpha = 0;
            }];
        }
    
        else {
    
            CGFloat scale = (224/_item2.frame.size.width);
            [UIView animateWithDuration:menuAlpha animations:^{
                _item1.transform = CGAffineTransformScale(_item1.transform, scale, scale);
                _item1.alpha = 1;
                _item2.transform = CGAffineTransformScale(_item2.transform, scale, scale);
                _item2.alpha = 1;
                _item3.transform = CGAffineTransformScale(_item3.transform, scale, scale);
                _item3.alpha = 1;
                _menuBackground.alpha = 1;
            }];
        }
    }
    

    }

    如果这个问题仍然令人困惑,请说出来,我会编辑它以澄清任何事情。

    感谢您的见解!

    编辑:在回应H先生时,代码是为了让您了解我希望用户能够淡入和淡出菜单视图,仅此问题与代码无关。它只是作为一种工具来帮助理解我想要做的事情。我也考虑过你的建议,但我想不出在IB中分别设计每个视图的方法。你能否详细说明你的评论作为答案?请解决我对IB的担忧。

    编辑2:为了回应danh,我查看了您所引用的开发人员参考,并希望得到与此相关的答案,但我是iOS开发人员的新手。这对我来说有点难以理解。你能建议一些关于这个主题的教程吗?

    感谢。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。在讨论某些选项之前,我想说我认为将所有观点保留在一个UIViewController中是不可取的。它很可能会创建一个过长,复杂的文件,难以维护。至于你不想在你的动画中使用“黑屏”。很可能没有一个。

  1. 您可以使用其中一个现有容器视图控制器(如UITabBarController)。不希望UITabBar可见?然后隐藏它并以编程方式更改selectedViewController
  2. 在故事板中设置,使用和提供自定义动画的“自定义”segue。
  3. 将您的4个视图转换为UIViewController s(每个视图一个),然后创建自己的容器视图控制器,根据需要加载并显示这4个视图控制器。容器视图控制器可以包含所有动画代码,因为视图控制器嵌入在UIView中。虽然这是最多的代码,但它提供了最大的灵活性,并且仍然可以正确地封装所有代码。