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
            }
        }
    }
}

参照地址:https://github.com/ioscreator/ioscreator/blob/master/IOSDragViewsGesturesTutorial/IOSDragViewsGesturesTutorial/CustomView.swift

上一篇 下一篇

猜你喜欢

热点阅读