I want to create an extension for UIViewController but I have one problem with my @objc func.
How to pass this parameter below?
#selector(handlePanGestExt(sender: **cardOriginY:** )))
fileprivate var cardOriginY : CGFloat!
extension UIViewController {
func panGestureRecognizerToHandleDragAndDissmisView(inCardView : UIView, cardOriginY : CGFloat) {
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGestExt(sender: cardOriginY: )))
inCardView.addGestureRecognizer(panGesture)
}
@objc func handlePanGestExt(sender: UIPanGestureRecognizer, cardOriginY : CGFloat) {
let fileView = sender.view!
switch sender.state {
case .began, .changed:
moveViewWithPan(view: fileView, sender: sender)
case .ended:
let dragVelocity = sender.velocity(in: view)
if dragVelocity.y >= 1300 {
dismiss(animated: false, completion: nil)
} else {
returnViewToOrigin(view: fileView, cardOriginY: cardOriginY)
}
default:
break
}
}
func moveViewWithPan(view: UIView, sender: UIPanGestureRecognizer) {
let translation = sender.translation(in: view)
guard translation.y >= 0 else { return }
view.center = CGPoint(x:view.center.x, y: view.center.y + translation.y)
sender.setTranslation(CGPoint.zero, in: view)
}
func returnViewToOrigin(view: UIView, cardOriginY : CGFloat) {
UIView.animate(withDuration: 0.3) {
view.frame.origin = CGPoint(x: 0.0 , y: cardOriginY)
}
}
what am I doing wrong ? When I am calling func panGestureRecognizerToHandleDragAndDissmisView
, I want to pass this parameter cardOriginY