学习笔记:UIPanGestureRecognizer

UIPanGestureRecognizer实现左右滑动
1.添加手势和观察者
// 添加pan手势
[self.view addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]];

// 添加观察者监听oneView的frame的改变
[self.oneView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld context:nil];

2.监听手势和观察者
// 监听观察者

  • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
    {
    if (self.oneView.frame.origin.x > 0) {
    self.threeView.hidden = YES;
    }else if (self.oneView.frame.origin.x < 0)
    {
    self.threeView.hidden = NO;
    }
    }

  • (void)dealloc
    {
    NSLog(@"移除");
    [self.oneView removeObserver:self forKeyPath:@"frame"];
    }
    // 监听手势

  • (void)pan:(UIPanGestureRecognizer *)pan
    {
    // 获取手势移动的位置 self.view:规定区域
    CGPoint point = [pan translationInView:self.view];
    // 获取位置水平的偏移量
    CGFloat offsetX = point.x;
    // 改变oneView的frame
    self.oneView.frame = [self frameWithOffsetX:offsetX];

    // 复位 否则pan的偏移量会递增
    [pan setTranslation:CGPointZero inView:self.view];

// 判断拖动结束的时候
if (pan.state == UIGestureRecognizerStateEnded) {
    CGFloat target = 0;
    if (self.oneView.frame.origin.x > [UIScreen mainScreen].bounds.size.width * 0.5) {
        target = self.view.bounds.size.width * 0.2;
    }
    // 获取x偏移量
    CGFloat constant = self.view.bounds.size.width - target;
    // 便宜
    self.oneView.frame = target == 0 ? self.view.bounds : CGRectMake(constant, 0, self.view.bounds.size.width, self.view.bounds.size.height);
    
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • VLC的集成和使用 VLC介绍 VLC Media Player (VideoLAN) 为 Windows、Lin...
    Pocket阅读 20,124评论 75 66
  • 1)双向抽屉视图 2)抽屉动画 3)双向抽屉视图带缩放效果 4)抽屉视图动画缩放 #import "ApDrawe...
    衹氏阅读 5,848评论 0 0
  • 目前市场上很多APP都有抽屉效果的界面,界面大同小异,一下是我个人分析和实现的抽屉效果,我是以代码加注释的方式分析...
    coderwx阅读 4,062评论 0 0
  • #import "SSYViewController.h" #define ScreenW [UIScreen m...
    iOSkiller阅读 2,806评论 0 0
  • 正如张爱玲的“红玫瑰与白玫瑰”,平常夫妻要么没有纷争;要么所有的不满都会聚集,等待一件小事,就一起爆发,最终或继续...
    滑过_指尖阅读 1,162评论 0 0

友情链接更多精彩内容