代码托管到了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的左滑菜单栏简单实现的更多相关文章

  1. 类似QQ消息左滑删除的Demo

    最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View ...

  2. 仿QQ列表左滑删除

    一直想写个仿QQ通讯列表左滑删除的效果,今天终于忙里偷闲,简单一个. 大概思路是这样的: 通过 ontouchstartontouchmoveontouchend 结合css3的平移. 不多说,直接上 ...

  3. 使用zepto实现QQ消息左滑删除效果

    有这样一个需求: 1. 有一个列表,将每一个列表项左滑动出现删除按钮: 2. 右滑动隐藏删除按钮: 3. 点击这个删除按钮删除该列表项. 完成以后的效果: 这是微信网页端的页面,使用的是 zepto ...

  4. Android开发学习之路-PopupWindow和仿QQ左滑删除

    这周作业,要做一个类似QQ的左滑删除效果的ListView,因为不想给每个item都放一个按钮,所以决定用PopupWindow,这里记录一下 先放一下效果图: 先说明一下这里面的问题: ①没有做到像 ...

  5. js高仿QQ消息列表左滑功能

    该组件,主要功能类似于QQ消息列表左滑出现删除.标为已读等按钮的功能:现在的版本用的是纯javaScript编写:后续会跟进 angularJs 开发的类似组件以及jquery的; 下面,就让我们来认 ...

  6. 用C#代码实现类似QQ窗体的“上、左、右”停靠功能

    大家都知道QQ有一个自动停靠功能,即“上.左.右”,当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来, ...

  7. 模仿QQ左滑删除

    需求: 1.左滑删除 2.向左滑动距离超过一半的时候让它自动滑开,向右滑动超过一半的时候自动隐藏 3.一次只允许滑开一个item 还有,根本不需要自定义view来实现,谨防入坑 布局: <?xm ...

  8. Vue 仿QQ左滑删除功能(非原创)

    非原创,摘选来源:http://www.jb51.net/article/136221.htm. 废话不多说,相当实用,先记录. Html代码: <div class="contain ...

  9. [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子

    转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...

随机推荐

  1. 个人评测——K米

    K米APP案例分析 关于 K米 -- 的案例分析 产品 K米的APP (全国KTV点歌,手机直播,互动,交友,预订)的Android客户端 第一部分 调研,评测 评测: 软件的bug,功能评测,黑箱测 ...

  2. oracle 的分析函数

    row_number() over(partition by ... order by ...) rank() over(partition by ... order by ...) dense_ra ...

  3. liunx ln -s 软连接

    项目中遇到不同项目中上传图片共享问题 解决方法就用到了 liunx的ln -s 的软连接, 用法: liunx ln -s 文件路径 实现共享思路:不同的目录都软连接到同一个目录

  4. win10 开机黑屏只显示鼠标

    最靓,win10开机黑屏,网上试了很多办法没有解决,花了3个小时终于解决了,现在介绍一下方法. 首先,在黑屏模式下进入任务管理器,文件=>运行新任务=>Explorer.exe 此时桌面已 ...

  5. 网页边框样式与style样式部分总结

    1).border边框样式:border-style:solid 边框样式值如下: none : 无边框.与任何指定的border-width值无关 hidden : 隐藏边框.IE不支持 dotte ...

  6. 结构struct

    1.结构变量 1)定义结构类型 struct student { char *name; int age; int score[3]; }; 2)定义结构变量 struct student stu1, ...

  7. Elasticsearch 检索

    说到查询,那么索引也是一个绕不开的话题,可以说,没有索引就没有检索,先来看一个示意图 左边是索引过程,右边是检索过程.关键的步骤是分词过程,我用等号表示这两个过程一样,而且,必须一样,这个等号并不是模 ...

  8. js制作简单的计算器

    学着做了一个简单的计算器!记录记录!哈哈 <!DOCTYPE html> <html> <head> <title>简单的计算器</title&g ...

  9. hihocoder-平衡树·SBT

    http://hihocoder.com/problemset/problem/1337 #1337 : 平衡树·SBT 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 ...

  10. 检查失败,<master>分支有过其他更新,请先在本地合并<master>分支的代码