iphone – 左侧的PushViewController – 简单?

前端之家收集整理的这篇文章主要介绍了iphone – 左侧的PushViewController – 简单?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图让我的ViewController以与标准PushViewConrtoller相同的速度从左向右滑动,我没有使用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当您按下视图控制器或segues时,它不会让您自定义太多.我最终做的是覆盖perform方法并使用QuartzCore Animations来定制我们的转换.我将UIStoryBoardSegue子类化并覆盖了执行函数.

下面为Push或Pop定制,然后为Segues定制. (对于segues,请记住将类更改为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

猜你在找的Xcode相关文章