程序员

iOS 拖拽手势(UIPanGestureRecognizer)只做竖直/水平方向处理

作者:admin 2021-06-07 我要评论

拖拽手势提供的函数 函数 描述 open func translation(in view: UIView?) - CGPoint 获取到的是移动后手指在相对坐标系内移动的距离 open func setTranslation(_...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

拖拽手势提供的函数

函数描述
open func translation(in view: UIView?) -> CGPoint获取到的是移动后手指在相对坐标系内移动的距离
open func setTranslation(_ translation: CGPoint, in view: UIView?)用于设置每次拖拽操作时视图的偏移量,状态切换至end时,要记得清零
open func velocity(in view: UIView?) -> CGPoint获得平移时的速度

解决思路

1.创建拖拽手势实例,并依附于视图

 let v = UIView.init(frame: .init(x: 100, y: 300, width: 100, height: 100))
  v.backgroundColor = .red
        
 let p = UIPanGestureRecognizer.init(target: self, action: #selector(handlePan(pan:)))
  v.addGestureRecognizer(p)

2.实现手势的回调方法

    @objc func handlePan(pan: UIPanGestureRecognizer) {
        if pan.state == .changed || pan.state == .ended {
            let view = pan.view
            var viewRect = view?.frame
            let offset = pan.translation(in: view)
            print(offset.x)
            //例子中只演示仅竖直方向的手势处理,水平方向逻辑与之类似
            viewRect = changeYWith(frame: viewRect!, offset: offset)
            //更新视图的frame,已达到移动的视觉效果
            view?.frame = viewRect!
            //清零视图的偏移量记录
            pan.setTranslation(.zero, in: view)
        }
    }

3.实现更新视图坐标的方法(水平移动只更新x轴坐标,竖直方向移动则只更新y轴坐标)

    func changeYWith(frame: CGRect, offset: CGPoint) -> CGRect {
        var rect = frame
        var viewRect = rect.origin
        viewRect.y = offset.y + viewRect.y
         //移动至屏幕顶端,则不再继续向上
        if viewRect.y <= 0 {
            viewRect.y = 0
        }
        //移动至屏幕底部,则不再向下
        if viewRect.y >= self.view.frame.maxY - rect.height {
            viewRect.y = self.view.frame.maxY - rect.height
        }
        rect.origin = viewRect
        return rect
    }
;原文链接:https://blog.csdn.net/sinat_27798375/article/details/115541189

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Linux搭建FTP服务器

    Linux搭建FTP服务器

  • 数据结构实验报告线性表的应用

    数据结构实验报告线性表的应用

  • 2021-04-10  粤嵌单片机兴趣课(一)

    2021-04-10 粤嵌单片机兴趣课(一)

  • 蓝桥杯单片机----继电器和蜂鸣器的基本

    蓝桥杯单片机----继电器和蜂鸣器的基本

腾讯云代理商
海外云服务器