类似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的.左滑删除 ...
随机推荐
- HashSet和HashMap的区别
HashSet和HashMap的区别.Java的HashSet类是由哈希表支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用 null 元素.HashSet类为基本操作提供 ...
- 常见http status code
常见http status code 常见的状态码: HTTP: Status200– 服务器成功返回网页 HTTP: Status404– 请求的网页不存在 HTTP: Status503– 服务不 ...
- 03-方法ppt动手动脑问题及课后实验性问题总结
一.如何不使用static来进行调用函数? 1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了.如果想用又不加可以吧自己写的方法 ...
- 20169212《Linux内核原理与分析》课程总结
20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...
- php知识分享
PHP 获取ip地址代码汇总 ...
- 前端面试题2016--HTML
本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习.透彻学习,形成自己的知识链.万不可投机取巧,临时抱佛脚只求面试侥幸混过关是错误的!也是不可能的!不可能的!不可 ...
- T4模板批量生成代码
大家通过比对下,就应该知道怎么玩. T4代码 <#@ template debug="false" hostspecific="true" languag ...
- Centos 6.5 把自带python 2.6.6, 升级到 2.7
http://blog.csdn.net/jcjc918/article/details/11022345
- Eclipse中10个最有用的快捷键组合
Eclipse中10个最有用的快捷键组合 (转) 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...
- CAST()函数
语法: CAST(expression AS data_type) 参数说明: expression:任何有效的SQServer表达式 AS:用于分割两个参数,在AS之前的是需要处理的数据,在AS之后 ...