Iphone 将ViewController推到左侧-简单?

Iphone 将ViewController推到左侧-简单?,iphone,xcode,ios6,pushviewcontroller,Iphone,Xcode,Ios6,Pushviewcontroller,我试图让我的ViewController以与标准PushViewConrtoller相同的速度从左向右滑动,我没有使用导航栏,也不想使用模态,有没有简单的方法可以做到这一点,我在不同的线程上看到了很多变化,但没有一个能正常工作 我正在使用一个导航控制器,其代码如下: - (IBAction)launch1990:(id)sender { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"1990Storyboard" b

我试图让我的ViewController以与标准PushViewConrtoller相同的速度从左向右滑动,我没有使用导航栏,也不想使用模态,有没有简单的方法可以做到这一点,我在不同的线程上看到了很多变化,但没有一个能正常工作

我正在使用一个导航控制器,其代码如下:

- (IBAction)launch1990:(id)sender {

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"1990Storyboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"1990"];
[self.navigationController pushViewController:vc animated:YES];
}

执行正常的导航vc推送,但事先:

vc.navigationBar.hidden = YES;

UIStroryBoard当您按下视图控制器或segues时,它不会让您自定义太多。我最后做的是重写perform方法,并使用QuartzCore动画来定制我们的转换。我将UIStoryBoardSegue子类化,并重写了perform函数

下面是为推送或弹出定制,然后是为分段定制。(对于segues,请记住在IB中将类更改为自定义类)

要从普通的弹出或推送(这会产生交叉淡入淡出动画,请根据您的需要进行调整):

#导入
-(iAction)launch1990:(id)发送方{
CATTransition*转换=[CATTransition动画];
过渡期=0.45;
transition.timingFunction=[CamediaTimingFunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type=kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition-forKey:kCATransition];
UIStoryboard*情节提要=[UIStoryboard情节提要,名称:@“1990情节提要”捆绑包:nil];
UIViewController*vc=[storyboard InstanceEviewController标识符:@“1990”];
[self.navigationController pushViewController:vc动画:否];
}
要从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
//ZHCustomSegue.h
#进口
@接口ZHCustomSegue:UIStoryboardSegue
@结束
//ZHCustomSegue.m
#导入“ZHCustomSegue.h”
#导入“QuartzCore/QuartzCore.h”
@实现ZHCustomSegue
-(无效)履行{
UIViewController*sourceViewController=(UIViewController*)[self-sourceViewController];
UIViewController*destinationController=(UIViewController*)[self-destinationViewController];
CATTransition*转换=[CATTransition动画];
过渡期=0.45;
transition.timingFunction=[CamediaTimingFunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type=kCATransitionFade;//kCATransitionMoveIn;//,kCATransitionPush,kCATransitionReveal,kCATransitionFade
//transition.subtype=kCATransitionFromLeft;//kCATransitionFromLeft、kCATransitionFromRight、kCATransitionFromTop、kCATransitionFromBottom
[sourceViewController.navigationController.view.layer添加动画:转换
福克斯:kCATransition];
[sourceViewController.navigationController pushViewController:destinationController动画:否];
}
@结束

cattransition
子类型一起使用:kCATransitionFromLeft

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

由于该条,是否不想使用
UINavigationController
?还是你在用它?你说的“导航条”是什么意思?是的,我使用的是一个没有导航条的UINavigationController,我需要利用整个视图。谢谢你,刚刚测试了它,效果很好,希望它不会褪色,但效果很好。这似乎很有效;但是我同时看到两个动画,一个从左到右,另一个从右到左。这很奇怪。我甚至添加了一个
[self.navigationController.view.layer removeAllAnimations]在上面的代码中添加动画之前,但仍然可以看到相同的内容。你知道怎么把它弄干净吗?在这段代码运行之后,我调用了一个执行序列,因为我已经有了所有与prepareForSegue相关的逻辑,等等。我只需要在点击一个按钮时从左边进行转换,在点击另一个按钮时从右边进行转换。
CATransition *transition = [CATransition animation];
    transition.duration = .3;
    transition.type = kCATransitionMoveIn;
     transition.subtype= kCATransitionFromLeft;
    [self.navigationController.view.layer addAnimation:transition forKey:nil];