swift dragable view 拖动view
2020-05-27 本文已影响0人
松龄学编程
拖动view,有2个回调,一个用来调整约束constant,一个用来控制拖动结束,完成动画。做这个功能,数学基础不够,没种组合都试了试才成功,还是要学好数学呀。
class DragableView: UIView {
var lastOffsetYConstant: CGFloat = 0
var offsetYCallBack: ((CGFloat) -> Void)?
var panEndCallBack: ((CGFloat) -> Void)?
override init(frame: CGRect) {
super.init(frame: frame)
// Initialization code
let panRecognizer = UIPanGestureRecognizer(target:self, action:#selector(detectPan))
self.gestureRecognizers = [panRecognizer]
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc
func detectPan(_ recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.superview)
offsetYCallBack?(lastOffsetYConstant + translation.y)
if recognizer.state == .ended {
lastOffsetYConstant += translation.y
if let panEnd = panEndCallBack {
panEnd(lastOffsetYConstant)
lastOffsetYConstant = 0
}
}
}
}