This is the code I have written so far to change the position of the view when dragged. 

The view changes its center point when the `UIPanGestureRecognizer` is either changed or began and that happen when I let go the gesture. I do not want that. I want it to go along with my drag like what the `Notification Center and Control Center does`.

Thanks in advance for the help.

```
class ViewController: UIViewController {

let maxY = UIScreen.main.bounds.height
lazy var slideUpView: UIView = {
    let view = UIView(frame: CGRect(x: 0, y: maxY - 295, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height / 3 ))
    view.backgroundColor = .green
    return view
}()

lazy var redImageView: UIView = {
    let view = UIView(frame: CGRect(x: 0, y: maxY - 295, width: UIScreen.main.bounds.width, height: slideUpView.frame.height / 2 ))
    view.backgroundColor = .red
    return view
}()

override func viewDidLoad() {
    super.viewDidLoad()

    print("MaxX: \(UIScreen.main.bounds.maxX)")
    print("Max Hight: \(UIScreen.main.bounds.height)")
    print("MaxY: \(UIScreen.main.bounds.maxY)")
    print("Max width: \(UIScreen.main.bounds.width)")
    // MARK: add the views as subview
    let viewsArray = [slideUpView, redImageView]
    viewsArray.forEach{view.addSubview($0)}
    // Add a UIPanGestureRecognizer to it
    viewsArray.forEach {createPanGestureRecognizer(targetView: $0)}
}

// The Pan Gesture
func createPanGestureRecognizer(targetView: UIView) {
    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(recognizer:)))
    panGesture.maximumNumberOfTouches = 1
    targetView.addGestureRecognizer(panGesture)
}

@objc func handlePanGesture(recognizer: UIPanGestureRecognizer) {
    if recognizer.state == UIGestureRecognizerState.began || recognizer.state == UIGestureRecognizerState.changed {
        let translation = recognizer.translation(in: self.view)
        print(recognizer.view!.center.y)
        let newPos = CGPoint(x:recognizer.view!.center.x + translation.x, y: recognizer.view!.center.y + translation.y)
        if insideDraggableArea(newPos) {
            guard let targetedView = recognizer.view else {
                print("Error: No View to handle")
                return
            }
            targetedView.center.y = newPos.y
            recognizer.setTranslation(.zero, in: targetedView)
        }
    }
}

private func insideDraggableArea(_ point : CGPoint) -> Bool {
    return  // point.x > 50 && point.x < 200 &&
        point.y > (maxY * 0.27) && point.y <= maxY
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        let position = touch.location(in: view)
        print(position)
    }
  }
 }

```