类似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的.左滑删除 ...
随机推荐
- 个人评测——K米
K米APP案例分析 关于 K米 -- 的案例分析 产品 K米的APP (全国KTV点歌,手机直播,互动,交友,预订)的Android客户端 第一部分 调研,评测 评测: 软件的bug,功能评测,黑箱测 ...
- oracle 的分析函数
row_number() over(partition by ... order by ...) rank() over(partition by ... order by ...) dense_ra ...
- liunx ln -s 软连接
项目中遇到不同项目中上传图片共享问题 解决方法就用到了 liunx的ln -s 的软连接, 用法: liunx ln -s 文件路径 实现共享思路:不同的目录都软连接到同一个目录
- win10 开机黑屏只显示鼠标
最靓,win10开机黑屏,网上试了很多办法没有解决,花了3个小时终于解决了,现在介绍一下方法. 首先,在黑屏模式下进入任务管理器,文件=>运行新任务=>Explorer.exe 此时桌面已 ...
- 网页边框样式与style样式部分总结
1).border边框样式:border-style:solid 边框样式值如下: none : 无边框.与任何指定的border-width值无关 hidden : 隐藏边框.IE不支持 dotte ...
- 结构struct
1.结构变量 1)定义结构类型 struct student { char *name; int age; int score[3]; }; 2)定义结构变量 struct student stu1, ...
- Elasticsearch 检索
说到查询,那么索引也是一个绕不开的话题,可以说,没有索引就没有检索,先来看一个示意图 左边是索引过程,右边是检索过程.关键的步骤是分词过程,我用等号表示这两个过程一样,而且,必须一样,这个等号并不是模 ...
- js制作简单的计算器
学着做了一个简单的计算器!记录记录!哈哈 <!DOCTYPE html> <html> <head> <title>简单的计算器</title&g ...
- hihocoder-平衡树·SBT
http://hihocoder.com/problemset/problem/1337 #1337 : 平衡树·SBT 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 ...
- 检查失败,<master>分支有过其他更新,请先在本地合并<master>分支的代码