iOS实现简易的抽屉效果

本文实例为大家分享了iOS实现简易的抽屉效果的具体代码,供大家参考,具体内容如下

1.添加需要实现抽屉效果的三个视图,这里需要注意主视图需要放在最后添加

// 左边视图  ... // 右边视图   ... // 主视图     UIView *mainView=[[UIView alloc]initWithFrame:self.view.bounds];     mainView.backgroundColor=[UIColor greenColor];     _mainView=mainView;     [self.view addSubview:mainView];

2.实现左滑显示左边视图,右滑出现右边视图

添加平移手势和点击手势,实现左右滑动的监听和点击复位的效果

// 添加平移手势     UIPanGestureRecognizer *panGes=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)];     [self.mainView addGestureRecognizer:panGes];     // 添加点击返回手势     UITapGestureRecognizer *tapGes=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap)];     [self.view addGestureRecognizer:tapGes];

在平移手势调用的方法中,通过偏移量来确定mainView的frame,实现动画效果

首先通过translationInView:方法获取偏移量,通过偏移量的正负确定拖动的方向

当手指松开后需要根据mainView的x值确定其视图是定位到原始位置还是其缩放的位置

要其视图由当前点位移到目标位置,可以通过当前点到目标点的位移,然后调用frameWithOffsetX:方法获得mainView的frame

#define targetR 300 #define targetL -300 - (void)panGes:(UIPanGestureRecognizer *)panGes {     // 获取偏移量     CGPoint tranP=[panGes translationInView:self.mainView];     // 获得位移后的视图     self.mainView.frame=[self frameWithOffsetX:tranP.x];     // 判断拖动方向     if (self.mainView.frame.origin.x<0) {//向左         self.rightView.hidden=NO;     }else if(self.mainView.frame.origin.x>0)     {// 向右         self.rightView.hidden=YES;     }     // 当手指松开时,做自动定位     CGFloat target=0;     if (panGes.state==UIGestureRecognizerStateEnded) {         if (self.mainView.frame.origin.x>0.5*screenW) {             target=targetR;         }else if(CGRectGetMaxX(self.mainView.frame)<0.5*screenW)         {             target=targetL;         }         //offset为当前点到其目标点的位移         CGFloat offset=target-self.mainView.frame.origin.x;         [UIView animateWithDuration:0.5 animations:^{             self.mainView.frame=[self frameWithOffsetX:offset];         }];     }     // 复位     [panGes setTranslation:CGPointZero inView:self.mainView]; } #define maxY 120 // 根据mainView在X轴方向位移确定mainView的尺寸 - (CGRect)frameWithOffsetX:(CGFloat)offsetX {     CGRect frame=self.mainView.frame;     frame.origin.x+=offsetX;     frame.origin.y=fabs(frame.origin.x / screenW * maxY);     frame.size.height=screenH - frame.origin.y * 2;     return frame; }

3.如何让其他文件也能实现抽屉效果

首先拖入文件,然后新建一个新的ViewController,让其继承自我们导入的文件@interface ViewController :AZDrawerController

新建要实现抽屉效果的界面,添加其视图至我们的mainView中,并且让其控制器也成为界面控制器的子控件,让控制器单独的管理

// 当一个控制器的View添加到另一个控制器的View上的时候,那此时View所在的控制器也应该成为上一个控制器的子控制器.     AZTableViewController *vc1=[[AZTableViewController alloc]init];     vc1.view.frame=self.mainView.bounds;     [self.mainView addSubview:vc1.view];     [self addChildViewController:vc1];

推荐阅读

    计算机主板BIOS设置详细-BIOS知识

    计算机主板BIOS设置详细-BIOS知识,,什么是电脑BIOS,一般电脑主板已经设置完毕后,电脑就开始按del键进入BIOS。系统启动BIOS,即微机的基本输入

    6s 32G能升级到ios14吗

    6s 32G能升级到ios14吗,手机,系统,6s 32G能升级到ios14吗可以,但是ios14更新以后会占用10左右储存,还有系统没有完全汉化,如果没接受,也就可以

    三常见BIOS故障排除解决方案

    三常见BIOS故障排除解决方案,,笔记本电脑如何长时间出现黑屏为什么为什么如何删除和修改旧IBM笔记本电脑BIOS设置中的密码我想你会与这些

    联想bios设置图解|联想bios设置方法

    联想bios设置图解|联想bios设置方法,,联想bios设置方法1.首先我们打开电脑,当开机标识出现或者电脑开机时,连续使用键盘“DEL”进入BIOS设置

    coc进度转电脑ios|coc快速升级

    coc进度转电脑ios|coc快速升级,,1. coc快速升级1、 首先,你要知道并学会“刷墙”。它的意思是尽量给城墙多升升级,免得你防御很强,但

    dellu盘启动设置|dellu盘启动bios设置

    dellu盘启动设置|dellu盘启动bios设置,,1. dellu盘启动bios设置1、插入U盘,开机按F2进BIOS,也可以先按F12进这个界面,然后选择BIOS Setup回车

    串口硬盘bios设置|BIOS设置硬盘

    串口硬盘bios设置|BIOS设置硬盘,,1. BIOS设置硬盘接好SATA硬盘后,开机,按Del键进入CMOS设置界面;按键盘上的TAB键和方向键,进入integrated

    bios设置电源管理|Bios电源设置

    bios设置电源管理|Bios电源设置,,1. Bios电源设置电脑开机显示没有检测到开机设备,这是因为计算机的硬盘损坏导致的,因为计算机在开机自检的