美文网首页
仿QQ抽屉效果

仿QQ抽屉效果

作者: BlueEagleBoy | 来源:发表于2016-01-27 19:28 被阅读1041次

仿QQ抽屉效果

效果展示:

-QQ效果描述:QQ中的效果是侧滑的效果,当导航控制器从左侧画开的时候,左侧的视图也跟着有稍许的滑动。(注意:在这里左侧View你即可以添加一viewController,也可以添加一个view)。

  • 实现思想:

    • 侧滑:

      • 方法1:

      这种稍微有点复杂,侧滑我是在导航控制器的view添加一个拖拽手势,然后在手势的触发中,判断开始滑动的位置是否在左侧70个点内,如果在该范围内就可以滑动并修改导航控制view的transform,否则不能滑动。

      • 方法2:

      直接使用苹果原生的API 一个屏幕侧滑手势

    UIScreenEdgePanGestureRecognizer *screenPan = [UIScreenEdgePanGestureRecognizer alloc]initWithTarget:self action:@selector(panGesture:);
      screenPan.edges = UIRectEdgeLeft;
    
    • 定义一个枚举,用来定义导航控制器滑动的开始位置和结束位置。
    typedef enum {
    
      BLEViewTransformLocationOriginal,
      BLEViewTransformLocationLeft
      
      }BLEViewTransformLocation;
    
    
    
    • 左侧View的联动:我直接在手势的代理方法中,在改变导航控制器view的transform的同时,也以一定的比例改变左侧view的transform
    
    //手势触发方法
    

-(void)panGesture:(UIGestureRecognizer *)gesture {
CGFloat panTouchX = [gesture locationInView:self.view].x;

//当满足手势在哪个范围时才有处罚手势
if (gesture.state == UIGestureRecognizerStateBegan) {
    
    if (panTouchX <= BLEGestureMaxX) {
        
        self.lastPanTouchX = panTouchX;
    }
}
//判断是否满足拖拽条件范围
if (self.lastPanTouchX != 0) {
   
    CGPoint currentPoint = [gesture locationInView:self.view];
    
    CGFloat translateDist = currentPoint.x - self.lastPanTouchX;
    
    CGFloat nextTransformX = self.view.transform.tx + translateDist;
    
    //判断是否会超出左侧view
    if (nextTransformX <= 0) {
        
        self.transformLocation = BLEViewTransformLocationOriginal;
        
        //判断是否会超出左侧预留的宽度范围
    }else if (nextTransformX >= BLETransformMaxW) {
        
        self.transformLocation = BLEViewTransformLocationLeft;
        
    }else {
        
        self.leftView.transform = CGAffineTransformTranslate(self.leftView.transform, translateDist * 0.3, 0);

        self.view.transform = CGAffineTransformTranslate(self.view.transform, translateDist, 0);
    }
    
}

//当拖拽结束的时候会到原始位置
if (gesture.state == UIGestureRecognizerStateEnded) {
    
    self.transformLocation = self.view.transform.tx <  BLETransformMaxW * 0.5 ? BLEViewTransformLocationOriginal : BLEViewTransformLocationLeft;

    self.lastPanTouchX = 0;

}

}


- 遮罩view:当滑动到最右侧后,就添加一个透明遮罩,点击遮罩,就设置transformLocation 为 BLEViewTransformLocationOriginal,返回到原始位置

-(void)didClickCoverButton{

self.transformLocation = BLEViewTransformLocationOriginal;

}



总结:主要思想就上面那么多,代码很简单,大家可以用苹果自带的侧滑手势,用一下更加简洁。

相关文章

网友评论

      本文标题:仿QQ抽屉效果

      本文链接:https://www.haomeiwen.com/subject/jgadkttx.html