单击信息按钮时如何在两个UIViewControllers之间进行翻转动画?

时间:2011-01-07 06:19:12

标签: ios uiview uiviewcontroller flip

我有一个名为“LoginViewController”的登录页面。我在这个页面上有一个信息按钮。如果我点击它,我想显示一些关于我的应用程序的信息。此外,我想使用翻转动画呈现该信息页面。

创建信息按钮的代码是,

infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
infoButton.frame = CGRectMake(285, 425, 30, 30);
infoButton.backgroundColor = [UIColor clearColor];

[infoButton addTarget:self 
            action:@selector(displayInfoView) 
            forControlEvents:UIControlEventTouchUpInside];

如果单击信息按钮,将调用displayInfoView方法。在那里,我可以显示UIView来显示一些信息。我是对的吗?

对于翻转动画,我使用了这段代码......

[UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:.8];

[UIView setAnimationTransition:([loginPageView superview] ? UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromRight) 
        forView:mainView
        cache:YES]; 

if ([infoView superview]) {
    [infoView removeFromSuperview];
    [mainView addSubview:loginPageView];
}
else {
    [loginPageView removeFromSuperview];
    [mainView addSubview:infoView];
}

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];

此处loginPageView是包含信息按钮的登录视图。 infoView是包含有关应用程序的信息的视图。 mainView是持有当前观点的共同观点。

现在问题是,我可以在点击信息按钮时显示另一个视图控制器类,而不是显示UIView吗?请记住,翻转操作适用于UIView。但是,当我尝试使用UIViewController时,这会产生麻烦。

有人建议我如何表现出的UIViewController(我的应用程序,我需要证明AboutViewController)并单击与翻页效果的信息按钮?

5 个答案:

答案 0 :(得分:126)

要翻转到视图控制器:

viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:viewController animated:YES completion:nil];

要摆脱它:

[self dismissViewControllerAnimated:YES completion:nil];

答案 1 :(得分:21)

我正是这样做的:

 AboutShowViewController *aboutShowViewController = [[AboutShowViewController alloc] initWithNibName:@"AboutShowViewController" bundle:[NSBundle mainBundle]];

    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:0.80];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
                           forView:self.navigationController.view cache:NO];

    [self.navigationController pushViewController:aboutShowViewController animated:YES];
    [UIView commitAnimations];

    [aboutShowViewController release];

归功于faysar here

答案 2 :(得分:5)

您对Cocoa Touch中MVC结构的理解存在根本缺陷,即 View Controllers Views 具有可比性且相似。事实是,他们不是。

回到你的具体问题,是的,动画是基于视图而不是视图控制器。但是每个视图都应该由一个视图控制器控制。这个视图属于哪个控制器的东西完全取决于你。在您的情况下,动画可能发生在具有2个不同控制器的2个视图之间,或者,它们也可能发生在同一控制器的2个视图之间。

至于代码示例,我建议你看一下Xcode的默认模板之一 Utility Application ,它以简洁和标准化的方式实现了这个点击动作动画。< / p>

答案 3 :(得分:1)

  override func viewWillDisappear(_ animated: Bool) {
      super.viewWillDisappear(true)
      // for back button
      changeTransition()
  }
        //btnMap.addTarget(self, action: #selector(searchHotelsResultVC.goToMap), for: .touchUpInside)
       //btnMap.addTarget(self, action: #selector(MapViewController.backToList), for: .touchUpInside)
func goToMap()  {
      // for pushing
     changeTransition()
navigationController?.pushViewController(settingsVC, animated: false)
}
func backToList()  {
        // for dismiss 
        changeTransition()
        navigationController?.popViewController(animated: false)
        dismiss(animated: true, completion: nil)

    }
    func changeTransition()  {
        let transition = CATransition()
        transition.duration = 0.5
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        //transition.type = kCATransitionPush
        transition.type = "flip"
        transition.subtype = kCATransitionFromLeft
        navigationController?.view.layer.add(transition, forKey: kCATransition)

    }

答案 4 :(得分:0)

简单的代码行

li