37

我有一个名为“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. 但是当我尝试使用 a 时UIViewController,这会带来麻烦。

AboutViewController有人可以建议我在单击具有翻转效果的信息按钮时如何显示 UIViewController (在我的应用程序中,我需要显示)?

4

5 回答 5

128

翻转到视图控制器:

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

要摆脱它:

[self dismissViewControllerAnimated:YES completion:nil];
于 2011-09-12T08:13:08.703 回答
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 。

于 2011-07-13T02:45:54.597 回答
5

你对 Cocoa Touch 中的 MVC 结构的理解有一个根本性的缺陷,即View ControllerView是可比和相似的。事实是,他们不是。

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

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

于 2011-01-07T06:29:30.613 回答
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)

    }
于 2017-11-25T13:22:21.970 回答
0

simple lines of code

YourViewController *city = [self.storyboard instantiateViewControllerWithIdentifier:@"YourViewController"];
[UIView beginAnimations:nil context:nil];
[UIView  setAnimationDuration:.5];
[self.navigationController pushViewController:city animated:YES];
[UIView  setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
于 2017-02-07T08:45:08.627 回答