5

我需要将视图控制器推送到另一个视图控制器。

menuVC -> VC1 ->VC2

从 menuVC 到 VC1 不需要动画,但从 VC1 到 VC2 以及从 VC2 到 VC1 需要发生翻转动画。

但是,当从 VC2 转到 menuVC 时,不需要动画。

我正在使用以下代码:

(从如何使用翻转动画推送 viewController

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
FlashCardVC *flashCardVC = [[FlashCardVC alloc] init];
[self.navigationController pushViewController:flashCardVC animated:NO];
[UIView commitAnimations];

当我尝试执行上述操作时,屏幕完全空白。

怎么了?

4

3 回答 3

18

你现在真的应该使用基于块的动画。此外,如果您从同样位于同一故事板中的控制器实例化故事板控制器,您可以更轻松地使用 self.storyboard 访问该故事板。

-(IBAction)flipToNext:(id)sender {
    SecondController *next = [self.storyboard instantiateViewControllerWithIdentifier:@"Next"];
    [self.navigationController pushViewController:next animated:NO];
    [UIView transitionWithView:self.navigationController.view duration:1 options:UIViewAnimationOptionTransitionFlipFromRight animations:nil completion:nil];
}
于 2013-02-10T16:37:17.193 回答
2

在 Swift 4.2 中使用这些扩展

用于带有水平翻转动画的推送和弹出视图控制器

extension UINavigationController {

    func pushViewControllerWithFlipAnimation(viewController:UIViewController){
        self.pushViewController(viewController
        , animated: false)
        if let transitionView = self.view{
            UIView.transition(with:transitionView, duration: 0.8, options: .transitionFlipFromLeft, animations: nil, completion: nil)
        }
    }

    func popViewControllerWithFlipAnimation(){
        self.popViewController(animated: false)
        if let transitionView = self.view{
            UIView.transition(with:transitionView, duration: 0.8, options: .transitionFlipFromRight, animations: nil, completion: nil)
        }
    }
}
于 2018-12-20T09:28:07.063 回答
1

好答案: 显示 pushviewcontroller 动画看起来像 presentModalViewController

(代码)

    //UIViewController *yourViewController = [[UIViewController alloc]init];</s>

    [UIView  beginAnimations: @"Showinfo"context: nil];
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.75];
    [self.navigationController pushViewController: yourViewController animated:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
    [UIView commitAnimations];

但是,这也产生了一个空白屏幕。

相反,如果您使用情节提要,最好通过情节提要进行实例化:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle bundleForClass:[self class]]];

YourViewController *yourViewController = [storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];

yourViewControllerID 在 yourviewcontroller 类的身份检查器下的情节提要中设置。

于 2013-02-10T12:18:03.837 回答