左边的PushViewController语言 - 简单



我试图让我的ViewController以与标准pushviewcontroller相同的速度从左向右滑动,我不使用NavBar,也不想使用Modal,是否有一个简单的方法来做到这一点,我在不同的线程上看到了很多变化,但它们都不能正常工作!

我使用导航控制器与以下代码为我的推右…

- (IBAction)launch1990:(id)sender {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"1990Storyboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"1990"];
[self.navigationController pushViewController:vc animated:YES];
}

UIStroryBoard当你推送视图控制器或segue时,它不会让你自定义太多。我最终做的是覆盖执行方法,并使用QuartzCore动画来定制我们的过渡。我子类化了UIStoryBoardSegue并重写了perform函数。

下面的自定义为Push或Pop然后为segue。(对于segue,请记住将类更改为IB中的自定义类)。

从普通的弹出或推送(这是交叉淡出动画,调整它为您的):

    #import <QuartzCore/QuartzCore.h>

 - (IBAction)launch1990:(id)sender {
    CATransition* transition = [CATransition animation];
    transition.duration = .45;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"1990Storyboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"1990"];
    [self.navigationController pushViewController:vc animated:NO];
  }
从segue:
//ZHCustomSegue.h
#import <Foundation/Foundation.h>
@interface ZHCustomSegue : UIStoryboardSegue
@end

//  ZHCustomSegue.m
#import "ZHCustomSegue.h"
#import "QuartzCore/QuartzCore.h"
@implementation ZHCustomSegue

-(void)perform {
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
    UIViewController *destinationController = (UIViewController*)[self destinationViewController];
    CATransition* transition = [CATransition animation];
    transition.duration = .45;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush,   kCATransitionReveal, kCATransitionFade
   //transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom

    [sourceViewController.navigationController.view.layer addAnimation:transition
                                                            forKey:kCATransition];
    [sourceViewController.navigationController pushViewController:destinationController animated:NO];
}
@end

使用CATransitionsubtype: kCATransitionFromLeft

CATransition *transition = [CATransition animation];
    transition.duration = .3;
    transition.type = kCATransitionMoveIn;
     transition.subtype= kCATransitionFromLeft;
    [self.navigationController.view.layer addAnimation:transition forKey:nil];

执行vc推送的正常导航操作,但要提前:

vc.navigationBar.hidden = YES;

最新更新