美文网首页
iOS UIGesutreRecognizer&实现抽屉效果

iOS UIGesutreRecognizer&实现抽屉效果

作者: Zonpai | 来源:发表于2018-08-06 11:19 被阅读0次

抽屉效果

实现:

1.界面切换
2.界面复位
3.界面自动转换

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setViewUp];
    //添加手势
    UIPanGestureRecognizer *panGs = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGs:)];
    [self.redView addGestureRecognizer:panGs];
    //添加监听手势复位
    [self addTapGesture];
}
//添加手势
- (void)addTapGesture{
    UITapGestureRecognizer *tapGs = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
    [self.view addGestureRecognizer:tapGs];
}
- (void)tapAction{
    [UIView animateWithDuration:0.7 animations:^{
        self.redView.frame = [[UIScreen mainScreen] bounds];
    }];
}
#define targetR 350
#define targetL -350
#define middleX [UIScreen mainScreen].bounds.size.width*0.5
- (void)panGs:(UIPanGestureRecognizer *)panGs {
    CGPoint point = [panGs translationInView:self.redView];
    if(self.redView.frame.origin.x >0){
        self.greenView.hidden = YES;
    }else{
        self.greenView.hidden = NO;
    }
    self.redView.frame = [self frameWithPointX:point.x];
    //自动复位
    if(panGs.state == UIGestureRecognizerStateEnded){
        CGFloat target = 0;
        if(self.redView.frame.origin.x > middleX){
            target = targetR;
        }else if (CGRectGetMaxX(self.redView.frame)<middleX){
            target = targetL;
        }
        [UIView animateWithDuration:0.4 animations:^{
            CGFloat offset = target - self.redView.frame.origin.x;
            self.redView.frame = [self frameWithPointX:offset];
        }];
    }

    [panGs setTranslation:CGPointZero inView:self.redView];
}
#define screenW [UIScreen mainScreen].bounds.size.width
#define screenFrame [UIScreen mainScreen].bounds

- (CGRect)frameWithPointX:(CGFloat)offsetX {
    CGRect frame = self.redView.frame;
    frame.origin.x += offsetX;
    CGFloat translationY = fabs(frame.origin.x* 100 / screenW);
        frame.origin.y =translationY;
    frame.size.height = [UIScreen mainScreen].bounds.size.height - 2*frame.origin.y;
    return frame;
}

- (void)setViewUp{
    //redView;
    UIView *redView = [[UIView alloc] initWithFrame:screenFrame];
    redView.backgroundColor = [UIColor redColor];
    self.redView = redView;
    //blueView
    UIView *blueView = [[UIView alloc] initWithFrame:screenFrame];
    blueView.backgroundColor = [UIColor blueColor];
    self.blueView = blueView;
    //greenView
    UIView *greenView = [[UIView alloc] initWithFrame:screenFrame];
    greenView.backgroundColor = [UIColor greenColor];
    self.greenView = greenView;
    //添加view
    [self.view addSubview:blueView];
    [self.view addSubview:greenView];
    [self.view addSubview:redView];
}

效果图


抽屉.gif

相关文章

  • iOS UIGesutreRecognizer&实现抽屉效果

    抽屉效果 实现: 1.界面切换2.界面复位3.界面自动转换 效果图

  • iOS 抽屉效果实现

    1.添加需要实现抽屉效果的三个视图,这里需要注意主视图需要放在最后添加 2.实现左滑显示左边视图,右滑出现右边视图...

  • IOS抽屉效果的实现

    抽屉视图实现的思路 UIViewController 控制着一个 左边的抽屉视图(LeftViewControl...

  • iOS 抽屉效果的实现

    整个效果有两个视图:蓝色View和红色View,可以把红色View的效果拆分为水平方向的平移和整个的缩放,这样水平...

  • iOS 抽屉效果

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

  • iOS 抽屉效果

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

  • iOS抽屉效果

    我们在用QQ时都会发现,消息列表向左滑动时,左侧的功能界面被显示出来,消息列表会拉到最右侧, 就像一个抽屉拉出来一...

  • ios抽屉效果

    #import @interfaceDragViewController :UIViewController @p...

  • swift实现抽屉效果

    抽屉效果实现源码

  • iOS 13:抽屉效果、Quartz2D、图形绘制实例

    抽屉效果 实现抽屉效果,尽量不要使用touchMoved:,因为touchMoved:不能添加到UITableVi...

网友评论

      本文标题:iOS UIGesutreRecognizer&实现抽屉效果

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