【发布时间】:2021-12-23 11:07:15
【问题描述】:
我想为 UIViewController 创建一个扩展,但我的 @objc 函数有一个问题。
下面这个参数怎么传?
#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)
}
}
我做错了什么?当我调用funcpanGestureRecognizerToHandleDragAndDissmisView时,我想传递这个参数cardOriginY
【问题讨论】:
-
您不能使用手势识别器“传递参数”。您希望通过
cardOriginY获得什么?
标签: ios viewcontroller swift5