版權聲明:本文爲博主原創文章,未經博主允許不得轉載。如需轉載請標註! 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
簡書博客地址