导航栏内部的抽屉效果

熟悉移动开发的朋友对抽屉效果一定不陌生。现在看起来简单但我刚开始做公司的ios项目的时候,上网找很多资料,但大部分都是外部侧滑效果类似网易客户端的那种外部侧滑效果(为什么小日本非得要求内部侧滑,,,,)。后来经过”俺様”苦心研究终于搞定。

进入主题

         1.创建一个主控制器,然后再包装成导航控制器。

@implementation AppDelegate


    MainViewController *mainView = [[MainViewController allocinit];

    mainView.view.backgroundColor = [UIColor redColor];


    UINavigationController *nav = [[UINavigationController allocinitWithRootViewController:mainView];

    [self.window setRootViewController:nav];


@end


         2.主控制器中添加 leftBarButtonItem

@implementation Main01ViewController


  self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithImageName:@"top_navigation_menuicon" target:selfaction:@selector(leftMenu)];

@end 


    3.侧滑效果实现

我们首先需要在创建一个UIViewController,用来做第二层显示。

。。

@property (nonatomic, strong) UIViewController *UIViewController;


- (UIViewController *)secondUIViewController

{

    if (!_secondUIViewController) {

        UIViewController *uiView = [[UIViewController alloc] init];

        _secondUIViewController = uiView;

    }

    return _secondUIViewController;

}

再将 secondUIViewController添加到主控制器上

    [self.view addSubview:_secondUIViewController.view];

    [self addChildViewController:_secondUIViewController];

点击导航栏左侧按钮,改变 secondUIViewController的frame,设定一个常量,就是偏移值。

#define ZLWidth 300


- (void)leftMenu

{

    //取出导航控制器的view

    UIView *show = self.UIViewController.view;

    //复位

    if (show.frame.origin.x == 0) {

        [UIView animateWithDuration:0.25 animations:^{

            CGRect frame = show.frame;

            frame.origin.x = ZLWidth ;

            show.frame = frame;

        }];

    } else {

        [UIView animateWithDuration:0.25 animations:^{

            CGRect frame = show.frame;

            frame.origin.x = 0 ;

            frame.origin.y = 0 ;

            show.frame = frame;

        }];

    }

}


这样就可以做到点击位移,再点击复位了。


滑动实现抽屉效果,这个也很简单,当滑动屏幕时取出secondUIViewController,改变其frame,具体代码如下

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

    //取出导航控制器的view

    UIView *show = self.UIViewController.view;

      CGFloat x = show.frame.origin.x;


    if (x < self.view.bounds.size.width && x >= 0) {

        //获取touch对象

        UITouch *touch = [touches anyObject];

        //获取当前点

        CGPoint currentPoint = [touch locationInView:self.view];

        //获取上一个点

        CGPoint prePoint = [touch previousLocationInView:self.view];

        //x轴偏移量

        CGFloat offsetX = currentPoint.x - prePoint.x;

        //设置当前主视图的frame

        //取出导航控制器的view

        UIView *show = self.UIViewController.view;

        CGRect frame = show.frame;

        frame.origin.x += offsetX;

        show.frame = frame;

    }

    

}


这样我们就能简单的实现导航栏内部的抽屉效果了。


以上


谢谢大家。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值