左右侧滑原理与实现方式

左右侧滑的原理在于把左边的vc.view,右边的vc.view和主视图控制器的view加到同一个vc。view上去,为主视图控制器的view加上拖拽和单点手势,做相应的处理控制相应的试图的frame就可以了。好了,下面我们来自己试试。第一步:为容器视图控制器声明一个方法:

-(instancetype)initWithLeftCtrl:(UIViewController *)leftCtrl withMainCtrl:(UIViewController *)maiCtrl withRightCtrl:(UIViewController *)rightCtrl;

在。m文件中实现这个方法实现方式如下:

-(instancetype)initWithLeftCtrl:(UIViewController *)leftCtrl withMainCtrl:(UIViewController *)maiCtrl withRightCtrl:(UIViewController *)rightCtrl

{

    self=[super initWithNibName:nil bundle:nil];

    if(self){

        _leftCtrl=leftCtrl;

        _mainCtrl=maiCtrl;

        _rightCtrl=rightCtrl;

        

        _isMain=YES;

        

        _panRecognizer=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handpan:)];

        _panRecognizer.maximumNumberOfTouches=1;

        

        _tapRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handTap:)];

        

        [_mainCtrl.view addGestureRecognizer:_tapRecognizer];

        [_mainCtrl.view addGestureRecognizer:_panRecognizer];


        

        _leftCtrl.view.frame=CGRectMake(-WIDTH, 0, WIDTH, HEIGHT);

        _rightCtrl.view.frame=CGRectMake(self.view.bounds.size.width+WIDTH, 0, WIDTH, HEIGHT);

        [self.view addSubview:_leftCtrl.view];

        [self.view addSubview:_mainCtrl.view];

        [self.view addSubview:_rightCtrl.view];

    }

    return self;

}

第三步:实现拖拽手势和单点手势的方法:

-(void)handpan:(UIPanGestureRecognizer *)pan

{

    CGPoint point=[pan translationInView:_mainCtrl.view];

    if(_isMain){

//point.x>0表示右滑,显示左视图

        if(point.x>0){

            [self showLeftCtrl];

        }else{

            [self showRightCtrl];

        }

    }

}


-(void)handTap:(UITapGestureRecognizer *)tap

{

    //单点主视图的view显示主视图

    [self showMainCtrl];

}

showMainCtrl与showLeftCtrl与showRightCtrl方法实现如下:

-(void)showMainCtrl

{

    _isMain=YES;

    [UIView animateWithDuration:0.35 animations:^{

        _leftCtrl.view.frame=CGRectMake(-WIDTH, 0,WIDTH, HEIGHT);

        _mainCtrl.view.frame=CGRectMake(0, 0, self.view.bounds.size.width, HEIGHT);

        _rightCtrl.view.frame=CGRectMake(self.view.bounds.size.width+WIDTH, 0, WIDTH, HEIGHT);

    }];

}


-(void)showLeftCtrl

{

    _isMain=NO;

    [UIView animateWithDuration:0.35 animations:^{

        _leftCtrl.view.frame=CGRectMake(0, 0,WIDTH, HEIGHT);

        _mainCtrl.view.frame=CGRectMake(WIDTH, 0, self.view.bounds.size.width, HEIGHT);

        _rightCtrl.view.frame=CGRectMake(self.view.bounds.size.width+WIDTH+WIDTH, 0, WIDTH, HEIGHT);

    }];

}


-(void)showRightCtrl

{

    _isMain=NO;

    [UIView animateWithDuration:0.35 animations:^{

        _rightCtrl.view.frame=CGRectMake(self.view.bounds.size.width-WIDTH, 0, WIDTH, HEIGHT);

        _leftCtrl.view.frame=CGRectMake(-WIDTH-WIDTH, 0,WIDTH, HEIGHT);

        _mainCtrl.view.frame=CGRectMake(-WIDTH, 0, self.view.bounds.size.width, HEIGHT);

        

    }];

}

这里的_isMain表示是否显示的不是主视图,便于过滤不需要的效果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值