类似qq的左滑菜单栏简单实现
代码托管到了Github https://github.com/cyuanyang/YYSlideView
主演实现代码:
1.滑动的viewController的初始化主要view
-(instancetype)initWithSlideView:(YYBaseSlideView * )view{
self = [super init]; if (self) {
self.slideView = view;
} return self;
} -(void)viewDidLoad{
[super viewDidLoad]; _state = SlideViewStateClosed;
[self.view addSubview:_slideView]; self.mainView = [[UIView alloc]initWithFrame:self.view.frame]; _mainView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_mainView]; [self.mainView addSubview:[self loadMainView]]; UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)]; [self.view addGestureRecognizer:pan]; if (Is_Show_Cover) {
self.coverView = [[UIView alloc]initWithFrame:self.view.frame];
_coverView.backgroundColor = [UIColor blackColor];
_coverView.alpha = 0.0;
[self.mainView addSubview:_coverView];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction)];
[_coverView addGestureRecognizer:tap]; [_mainView insertSubview:[self loadMainView] belowSubview:_coverView];
}else{
[_mainView addSubview:[self loadMainView]];
} }
2.监听手势的处理方法
-(void)panAction:(UIPanGestureRecognizer *)pan{
static CGFloat beginX = -;
CGPoint point = [pan locationInView:self.view];
if(pan.state == UIGestureRecognizerStateBegan) {
beginX = point.x;
}else if(pan.state == UIGestureRecognizerStateEnded){
beginX = -;
if (_mainView.frame.origin.x < AUTO_X) {
[self autoAnim:NO];
}else{
[self autoAnim:YES];
} if (_mainView.frame.origin.x == ) {
_state = SlideViewStateClosed;
[self showOrHideCover:NO];
}else if(_mainView.frame.origin.x == _slideView.slideWidth){
_state = SlideViewStateOpened;
[self showOrHideCover:YES];
}
}else if (pan.state == UIGestureRecognizerStateChanged){
CGFloat detlaX = ;
if (_state == SlideViewStateClosed) { detlaX = point.x - beginX; }else if(_state == SlideViewStateOpened){
detlaX =_slideView.slideWidth + point.x - beginX;
} CGRect mainRect = _mainView.frame;
mainRect.origin.x = detlaX;
if (mainRect.origin.x >=_slideView.slideWidth) {
mainRect.origin.x = _slideView.slideWidth;
}else if (mainRect.origin.x <=){
mainRect.origin.x = ;
} _mainView.frame = mainRect; CGRect slideRect = _slideView.frame;
slideRect.origin.x = detlaX/ - _slideView.slideWidth/;
if (slideRect.origin.x >=) {
slideRect.origin.x = ;
}else if (slideRect.origin.x <= -_slideView.slideWidth/){
slideRect.origin.x = -_slideView.slideWidth/;
}
_slideView.frame = slideRect;
}
}
3.自动滚动的方法:
/*
* open or close
*/
-(void)autoAnim:(BOOL)isOpen{
[UIView animateWithDuration:ANIM_DUR delay: options:UIViewAnimationOptionCurveLinear animations:^{
CGRect mainRect = _mainView.frame;
CGRect slideRect = _slideView.frame;
if (isOpen) {
mainRect.origin.x = _slideView.slideWidth;
slideRect.origin.x = ;
_state = SlideViewStateOpening;
}else{
mainRect.origin.x = ;
slideRect.origin.x = -_slideView.slideWidth/;
_state = SlideViewStateClosing;
}
_mainView.frame = mainRect;
_slideView.frame = slideRect;
} completion:^(BOOL finished) { if (isOpen) {
_state = SlideViewStateOpened;
}else{
_state = SlideViewStateClosed;
}
}];
}
4.自定义的左边的view
-(instancetype)initWithWidth:(CGFloat)width{
CGRect rect = CGRectMake(-width/, , width, H);
self = [super initWithFrame:rect]; if (self) {
_slideWidth = width;
[self initView];
} return self;
} ///子类重写回调
-(void)initView{ }
OK!!!
类似qq的左滑菜单栏简单实现的更多相关文章
- 类似QQ消息左滑删除的Demo
最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View ...
- 仿QQ列表左滑删除
一直想写个仿QQ通讯列表左滑删除的效果,今天终于忙里偷闲,简单一个. 大概思路是这样的: 通过 ontouchstartontouchmoveontouchend 结合css3的平移. 不多说,直接上 ...
- 使用zepto实现QQ消息左滑删除效果
有这样一个需求: 1. 有一个列表,将每一个列表项左滑动出现删除按钮: 2. 右滑动隐藏删除按钮: 3. 点击这个删除按钮删除该列表项. 完成以后的效果: 这是微信网页端的页面,使用的是 zepto ...
- Android开发学习之路-PopupWindow和仿QQ左滑删除
这周作业,要做一个类似QQ的左滑删除效果的ListView,因为不想给每个item都放一个按钮,所以决定用PopupWindow,这里记录一下 先放一下效果图: 先说明一下这里面的问题: ①没有做到像 ...
- js高仿QQ消息列表左滑功能
该组件,主要功能类似于QQ消息列表左滑出现删除.标为已读等按钮的功能:现在的版本用的是纯javaScript编写:后续会跟进 angularJs 开发的类似组件以及jquery的; 下面,就让我们来认 ...
- 用C#代码实现类似QQ窗体的“上、左、右”停靠功能
大家都知道QQ有一个自动停靠功能,即“上.左.右”,当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来, ...
- 模仿QQ左滑删除
需求: 1.左滑删除 2.向左滑动距离超过一半的时候让它自动滑开,向右滑动超过一半的时候自动隐藏 3.一次只允许滑开一个item 还有,根本不需要自定义view来实现,谨防入坑 布局: <?xm ...
- Vue 仿QQ左滑删除功能(非原创)
非原创,摘选来源:http://www.jb51.net/article/136221.htm. 废话不多说,相当实用,先记录. Html代码: <div class="contain ...
- [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子
转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...
随机推荐
- OpenCV2的Mat矩阵形式自定义初始化
我们知道,OpenCV2的矩阵形式是Mat,那么Mat矩阵的初始化怎么自定义呢 ?由于比较简单,文字部分我就不多加说明了,见代码,有下面几种: //////////////////////////// ...
- shell中创建mysql库和执行sql脚本
以前执行oracle脚本都是放到plsql中执行 mysql 脚本执行: (1).先创建一个worlddb库 (2).导入sql脚本: 这就ok啦,哈哈.
- 很重要的vue的生命周期
- 并发编程 20—— AbstractQueuedSynchronizer 深入分析
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
- 《Javascript设计模式》笔记一js的表现力
用不同方法完成同样一个任务:启动和停止动画. 1.过程式的程序设计: function startAnimation(){ ... } function stopAnimation(){ ... } ...
- css属性的书写
书写顺序: 注释方式: /* 块状注释文字 * 块状注释文字 * 块状注释文字 */ .m-list{width:500px;} .m-list li{height:20px;line-height: ...
- CASthesis 模板编译的问题
使用CASthesis模板(https://github.com/xiaoyao9933/UCASthesis,介绍里说这个版本是在ThuThesis的基础上修改的),自带的说明如下. 使用须知 == ...
- AutoHotkey(AHK)
这是2009年用过的一个软件,自动键盘执行的一个东西,能提高效率,代替人工击键和鼠标操作,现在中文化很好了,如下地址是中文文档 http://ahkcn.sourceforge.net/docs/Tu ...
- 用cmd命令行导数据
Imp hbtest/hbtest@moms file=d:/hj.dmp fromuser=moms touser=hbtest 也可以用PL/SQL Developer "工具&quo ...
- 利用WPS 2012/2013 0day针对中国政府部门的定向攻击
今天早上,我们捕获到一个利用wps 2012/2013 0day针对中国政府部门的钓鱼邮件定向攻击事件. 邮件发件人以2014中国经济形势解析高层报告组委会 标题发出,附件为包含wps2012 0da ...