我有一个名为“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
)并单击与翻页效果的信息按钮?
答案 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