类qq侧滑效果实现

ViewController.m

在self.view上创建一个透明的View

  UIView *mainView=[[UIView alloc]initWithFrame:CGRectMake(-self.view.bounds.size.width*0.25,0,self.view.bounds.size.width,self.view.bounds.size.height)];
    
    mainView.backgroundColor = [UIColor lightGrayColor];
    
    [self.view addSubview:mainView];

添加tabbarController的view

- (void)addTabbarController
{
    _barVC = [[TabbarController alloc]init];

    [self addChildViewController:_barVC];
    
    [self.view addSubview:_barVC.view];
    
    _barVC.view.frame = self.view.bounds;
}

添加手势

-(void)addRecognizer{
    //    添加拖拽
    UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(didPanEvent:)];
    
    [self.view addGestureRecognizer:pan];
}

实现拖拽


-(void)didPanEvent:(UIPanGestureRecognizer *)recognizer{
    
    // 1. 获取手指拖拽的时候, 平移的值
    CGPoint translation = [recognizer translationInView:_barVC.view];
    
    // 2. 让当前控件做响应的平移
    _barVC.view.transform = CGAffineTransformTranslate(_barVC.view.transform, translation.x, 0);
    
    [self.view.subviews objectAtIndex:1].ttx=[self.view.subviews objectAtIndex:2].ttx/3;
    
    // 3. 每次平移手势识别完毕后, 让平移的值不要累加
    [recognizer setTranslation:CGPointZero inView:_barVC.view];
    
    //获取最右边范围
    CGAffineTransform  rightScopeTransform=CGAffineTransformTranslate(self.view.transform,[UIScreen mainScreen].bounds.size.width*0.75, 0);
    
    //    当移动到右边极限时
    if (_barVC.view.transform.tx>rightScopeTransform.tx) {
        
        //        限制最右边的范围
        _barVC.view.transform=rightScopeTransform;
        //        限制透明view最右边的范围
        [self.view.subviews objectAtIndex:1].ttx=[self.view.subviews objectAtIndex:2].ttx/3;
        
        //        当移动到左边极限时
    }else if (_barVC.view.transform.tx<0.0){
        
        //        限制最左边的范围
        _barVC.view.transform=CGAffineTransformTranslate(self.view.transform,0, 0);
        //    限制透明view最左边的范围
        [self.view.subviews objectAtIndex:1].ttx=[self.view.subviews objectAtIndex:2].ttx/3;
        
    }
    //    当托拽手势结束时执行
    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        [UIView animateWithDuration:0.2 animations:^{
            
            if (_barVC.view.x >[UIScreen mainScreen].bounds.size.width*0.5) {
                
                _barVC.view.transform=rightScopeTransform;
                
                [self.view.subviews objectAtIndex:1].ttx=_barVC.view.ttx/3;
                
            }else{
                
                _barVC.view.transform = CGAffineTransformIdentity;
                
                [self.view.subviews objectAtIndex:1].ttx=_barVC.view.ttx/3;
            }
        }];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 15,316评论 4 61
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,730评论 1 14
  • 文 | 墨书 图 |来源于网络 你不能因为虚无缥缈的未来,而不顾自己真正想要的。 一年岁末。 这是2016年的最后...
    墨书7987阅读 275评论 0 0
  • “人的心里的空间有限,能装下的人数为定值,所以有着源源不断的人进入你的生命,占据你的心,也会有数不清的人伫足片刻离...
    旅行后的再见阅读 783评论 0 6
  • 赶到早点摊时,最后一杯豆浆被买走了,老板娘推荐了一杯温热的米酒小汤圆,很应景,今年元宵节的开端。 去年此时,急赴东...
    张永胜_永往直前阅读 230评论 0 0

友情链接更多精彩内容