Combine longpress gesture and drag gesture together

后端 未结 5 764
执笔经年
执笔经年 2020-12-07 20:37

I\'m moving my views by

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveRight:)];
[panRecogn         


        
5条回答
  •  死守一世寂寞
    2020-12-07 21:22

    In Swift this can be achieved using below code

    class DragView: UIView { 
      // Starting center position
      var initialCenter: CGPoint?
    
      override func didMoveToWindow() {
        super.didMoveToWindow()
        // Add longPress gesture recognizer
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPressAction(gesture:)))
        addGestureRecognizer(longPress)
      }
    
      // Handle longPress action
      func longPressAction(gesture: UILongPressGestureRecognizer) {
        if gesture.state == .began {
            guard let view = gesture.view else {
                return
            }
            initialCenter = gesture.location(in: view.superview)
        }
        else if gesture.state == .changed {
            guard let originalCenter = initialCenter else {
                return
            }
    
            guard let view = gesture.view else {
                return
            }
    
            let point = gesture.location(in: view.superview)
    
            // Calculate new center position
            var newCenter = view.center;
            newCenter.x += point.x - originalCenter.x;
            newCenter.y += point.y - originalCenter.y;
    
            // Update view center
            view.center = newCenter
        }
        else if gesture.state == .ended {
           ...
        }
    }
    

提交回复
热议问题