美文网首页
抽屉效果

抽屉效果

作者: nemo_o | 来源:发表于2016-12-27 11:42 被阅读0次

简洁易用的抽屉效果,一如既往的详细注解

github地址:[https://github.com/nemo316/SlidingDrawer)

主要代码的实现

#pragma mark - 拖动事件
- (void)pan:(UIPanGestureRecognizer *)pan{
    
    //获取偏移量
    CGPoint transP = [pan translationInView:self.mainV];
    //为什么不使用transform,是因为我们还要去修改高度,使用transform,只能修改,x,y
    //self.mainV.transform = CGAffineTransformTranslate(self.mainV.transform, transP.x, 0);

    self.mainV.frame = [self frameWithOffsetX:transP.x];
    //判断拖动的方向
    if(self.mainV.frame.origin.x > 0){
        //向右
        self.rightV.hidden = YES;
    }else if(self.mainV.frame.origin.x < 0){
        //向左
        self.rightV.hidden = NO;
    }
    
    //当手指松开时,做自动定位
    CGFloat target = 0;
    if (pan.state == UIGestureRecognizerStateEnded) {
        
        if (self.mainV.frame.origin.x > screenW * 0.5 ) {
            //1判断在右侧
            //当前View的x有没有大于屏幕宽度的一半,大于就是在右侧
            target = targetR;
        }else if(CGRectGetMaxX(self.mainV.frame) < screenW * 0.5){
            //2.判断在左侧
            //当前View的最大的x有没有小于屏幕宽度的一半,小于就是在左侧
            target = targetL;
        }
       
        //计算当前mainV的frame.
        CGFloat offset = target - self.mainV.frame.origin.x;
//        NSLog(@"qqqqqwwwww  %f",offset);
        [UIView animateWithDuration:0.5 animations:^{

            self.mainV.frame =  [self frameWithOffsetX:offset];
        }];
    }
    
    //复位
    [pan setTranslation:CGPointZero inView:self.mainV];
    
}
#pragma mark - 根据偏移量计算MainV的frame
- (CGRect)frameWithOffsetX:(CGFloat)offsetX {
    
//    NSLog(@"offsetX===%f",offsetX);
    
    CGRect frame = self.mainV.frame;
//    NSLog(@"x====%f",frame.origin.x);
    frame.origin.x += offsetX;

    //当拖动的View的x值等于屏幕宽度时,maxY为最大,最大为100
    // 375 * 100 / 375 = 100
    
    //对计算的结果取绝对值
    CGFloat y =  fabs( frame.origin.x *  maxY / screenW);
    frame.origin.y = y;
    
    //屏幕的高度减去两倍的Y值
    frame.size.height = [UIScreen mainScreen].bounds.size.height - (2 * frame.origin.y);
    
    return frame;
}

抽屉效果.gif

相关文章

  • 抽屉效果

    抽屉效果拖拽 抽屉效果定位 给抽屉效果的view添加数据

  • 抽屉效果

    抽屉效果 左侧 抽屉 抽屉

  • 抽屉效果

    简洁易用的抽屉效果,一如既往的详细注解 github地址:[https://github.com/nemo316/...

  • 抽屉效果

    思路:跟控制器(rootVc)添加子控制器(下面三个)的view在跟控制器的 view 上面。(注意三个子控制器的...

  • 抽屉效果

    一.RESideMenu 现在大多App的主框架都是UITabBarController加若干导航控制器或者是带有...

  • 抽屉效果

    创建一个控制器,给控制器的view添加两个view 给上面的view添加手势,在手指拖动的时候,对上面的view做...

  • 抽屉效果

    #import "SSYViewController.h" #define ScreenW [UIScreen m...

  • 抽屉效果

    抽屉效果 效果图: 第一步:搭建界面 第二步.添加手势: 第三步:当手指松开时做到自动定位.

  • iOS 抽屉效果

    效果图 平时开发中经常会用到抽屉效果,关于抽屉的实现有许多三方库,读者可以根据需要选用,本节内容主要简单的实现一个...

  • iOS 抽屉效果

    抽屉效果思路: 三个View叠加,一个作为左View,一个作为右View,一个主View,在主View上添加拖动手...

网友评论

      本文标题:抽屉效果

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