奔跑吧 iOS

工欲善其事,必先利其器系列之 UINavigationContr

2017-03-01  本文已影响35人  SmileFans

有时候我们需要

1、自定义navigationController push和pop界面切换动画
2、Push 、Pop 的时候更好的记录层次

那就试着对UINavigationController Category一下吧

💗Category的用途

  1.  在不创建继承类的情况下实现对已有类的扩展。
    
  2.  简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。
    
  3.  将常用的相关的方法分组。
    

关于push和pop界面切换动画

代码如下:

UINavigationController+Animation.h

#import <UIKit/UIKit.h>

@interface UINavigationController (Animation)

- (void)pushViewController:(UIViewController *)controller withTransition:(UIViewAnimationTransition)transition;

- (UIViewController *)popViewControllerWithTransition:(UIViewAnimationTransition)transition;

@end

UINavigationController+Animation.m

- (void)pushViewController:(UIViewController *)controller withTransition:(UIViewAnimationTransition)transition {
    [UIView beginAnimations:nil context:NULL];
    [self pushViewController:controller animated:NO];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition:transition forView:self.view cache:YES];
    [UIView commitAnimations];
}

- (UIViewController *)popViewControllerWithTransition:(UIViewAnimationTransition)transition {
    [UIView beginAnimations:nil context:NULL];
    UIViewController *controller = [self popViewControllerAnimated:NO];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationTransition:transition forView:self.view cache:YES];
    [UIView commitAnimations];
    return controller;
}

So easy!!

关于动画补充一下:

UIViewAnimationTransition

//    UIViewAnimationTransitionNone    不使用动画
//    UIViewAnimationTransitionFlipFromLeft    从左向右旋转翻页
//    UIViewAnimationTransitionFlipFromRight    从右向左旋转翻页,与UIViewAnimationTransitionFlipFromLeft相反
//    UIViewAnimationTransitionCurlUp    卷曲翻页,从下往上
//    UIViewAnimationTransitionCurlDown    卷曲翻页,从上往下

如果需要更多自定义的动画效果,也可以自己自定义哦

效果:


关于Push 、Pop 的时候更好的记录层次

UINavigationController+NavManager

/**
 *  @brief  寻找Navigation中的某个viewcontroler对象
 *
 *  @param className viewcontroler名称
 *
 *  @return viewcontroler对象
 */
- (id)findViewController:(NSString*)className;
/**
 *  @brief  判断是否只有一个RootViewController
 *
 *  @return 是否只有一个RootViewController
 */
- (BOOL)isOnlyContainRootViewController;
/**
 *  @brief  RootViewController
 *
 *  @return RootViewController
 */
- (UIViewController *)rootViewController;
/**
 *  @brief  返回指定的viewcontroler
 *
 *  @param className 指定viewcontroler类名
 *  @param animated  是否动画
 *
 *  @return pop之后的viewcontrolers
 */
- (NSArray *)popToViewControllerWithClassName:(NSString*)className animated:(BOOL)animated;
/**
 *  @brief  pop n层
 *
 *  @param level  n层
 *  @param animated  是否动画
 *
 *  @return pop之后的viewcontrolers
 */
- (NSArray *)popToViewControllerWithLevel:(NSInteger)level animated:(BOOL)animated;

项目传送门
项目地址
https://github.com/SmileMee/SmileHelper.git


我是写代码的凡,如有错误,欢迎指正!🙂🙂🙂

上一篇下一篇

猜你喜欢

热点阅读