iOS swift 长按拖动视图 UIPanGestureRecognizer

1.按住拖动视图

    private func gestureSetup() {
    
    
        let colorView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        colorView.backgroundColor = UIColor.red
        view.addSubview(colorView)

        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(colorViewPan(gesture:)))
        colorView.addGestureRecognizer(panGesture)
    }
    
    @objc private func colorViewPan(gesture: UIPanGestureRecognizer) {
    
    
        if gesture.state == .began {
    
    
            print("pan began")
        } else if gesture.state == .changed {
    
    
            if let  panView = gesture.view {
    
    
                // 手势移动的 x和y值随时间变化的总平移量
                let translation = gesture.translation(in: panView)
                // 移动
                panView.transform = panView.transform.translatedBy(x: translation.x, y: translation.y)
                // 复位,相当于现在是起点
                gesture.setTranslation(.zero, in: panView)
            }
            
        } else if gesture.state == .ended {
    
    
            print("pan ended")
        }
    }


主要参考博客:iOS 触控事件 UITouch 和手势识别 UIGestureRecognizer - 稀土掘金

参考博客:
ios - 关于拖动手势简单应用场景 - 稀土掘金
UIPanGestureRecognizer进行视图滑动并处理手势冲突 - 稀土掘金

2.判断某个视图(点)是否移动到另一个视图上,移动到另一个视图里当前视图就消失

 //MARK: - 六个选项视图
    let testView = UIView()
    func addSixView(){
    
    
        testView.backgroundColor = .yellow
        view.addSubview(testView)
        testView.snp.makeConstraints {
    
     make in
            make.center.equalToSuperview()
            make.width.height.equalTo(300)
        }
    }
    
    //MARK: - 拖动视图
    
    private func gestureSetup() {
    
    
        
        let colorView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        colorView.backgroundColor = UIColor.red
        view.addSubview(colorView)

        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(colorViewPan(gesture:)))
        colorView.addGestureRecognizer(panGesture)
    }
    
    @objc private func colorViewPan(gesture: UIPanGestureRecognizer) {
    
    
        
        if gesture.state == .began {
    
    
            print("pan began")
        } else if gesture.state == .changed {
    
    
            if let  panView = gesture.view {
    
    
                // 手势移动的 x和y值随时间变化的总平移量
                let translation = gesture.translation(in: panView)
//                print(translation)
                let point = CGPoint(x: panView.frame.origin.x + 50, y: panView.frame.origin.y + 50)
               
                if  testView.frame.contains(point) {
    
    
                    panView.backgroundColor = .green
                    print("进来")
                }else{
    
    
                    panView.backgroundColor = .red
                    print("出去")
                }
                print(panView.frame.origin)
                if panView.frame.origin.x <= 0 && translation.x < 0{
    
    
                    return
                }
                // 移动
                panView.transform = panView.transform.translatedBy(x: translation.x, y: translation.y)
                // 复位,相当于现在是起点
                gesture.setTranslation(.zero, in: panView)
            }
            
        } else if gesture.state == .ended {
    
    
            if let  panView = gesture.view {
    
    
                let point = CGPoint(x: panView.frame.origin.x + 50, y: panView.frame.origin.y + 50)
               
                if  testView.frame.contains(point) {
    
    
                    gesture.view?.removeFromSuperview()
                    testView.backgroundColor = .black
                    print("进来end")
                }
            }
          
            print("pan ended")
        }
    }


参考博客:
iOS判断当前点击的位置是否在某个视图上

猜你喜欢

转载自blog.csdn.net/baidu_40537062/article/details/129229941
今日推荐