iOS UIGesutreRecognizer&实现抽屉效果

抽屉效果

实现:

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,038评论 3 119
  • 對於剛剛接觸毛筆的同學,如何掌握到其中的奧妙,是個重要的問題。順為勾,逆為勒,提按之間,慢慢去感受筆豪在紙上的優游...
    風無意聽濤畫苑阅读 832评论 0 1
  • 苏美 原文 就说读书,说:“金风细细,叶叶梧桐坠,绿酒初尝人易醉,一枕小窗浓睡”。以前读,觉得这调调挺骚:小风,小...
    笨笨熊阅读 3,177评论 0 1
  • R:自选片段六:《高效学习魔法书》 I:重述原文 WHAT: 片段讲述了如何利用有效的4步骤去改善不好的习惯 WH...
    不怎么会说话的瓦片阅读 1,397评论 0 0