可拖動的Button

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。如需轉載請標註! https://blog.csdn.net/qq_34347441/article/details/54405947

根據拖動手勢實時位置實現可拖動的Button

直接上代碼:

/// 可以隨意拖動位置的按鈕組件
class SGMoveButton: UIButton
{
    // MARK: - properties
    var parentView:UIView?;
    
    // MARK: - life cycle
    override init(frame:CGRect)
    {
        super.init(frame:frame);
        
        let recognizer:UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(SGMoveButton.eventPanGestureRecognizerHandler(_:)));
        self.addGestureRecognizer(recognizer);
    }
    
    required init?(coder aDecoder:NSCoder)
    {
        super.init(coder:aDecoder);
    }
    
    deinit
    {

    }
    
    // MARK: - public methods
    
    // MARK: - event response
    internal func eventPanGestureRecognizerHandler(_ sender:UIPanGestureRecognizer)
    {
        if (sender.state == UIGestureRecognizerState.changed)
        {
            let currentPoint:CGPoint = sender.translation(in: self.parentView);// 獲得pan手勢相對於parentView移動的CGPoint
            self.center = CGPoint(x: self.center.x + currentPoint.x, y: self.center.y + currentPoint.y); // 按照上面相對移動的CGPoint改變button的CGPoint
            sender.setTranslation(CGPoint.zero, in: self.parentView); // 將pan手勢相對於parentView的CGPoint置零
        }
    }
}

demo地址:

https://github.com/songhaisheng/SGMoveButton

簡書博客地址

https://www.jianshu.com/u/3c7c13f3dc6b

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章