我搜索过StackOverflow并找到了一些非常有趣的东西,但是对于Objective-C来说都是如此,虽然Swift在某些方面非常相似,但我无法弄清楚如何在Swift中实现它
对于我正在开展的项目,我们将非常感激!
非常感谢!
答案 0 :(得分:10)
您可以在UIPanGestureRecognizer
上实施UIButton
。
无论您在何处创建按钮(viewDidLoad
,如果使用插座):
let pan = UIPanGestureRecognizer(target: self, action: "panButton:")
button.addGestureRecognizer(pan)
这将创建一个新的平移手势识别器并将其添加到按钮。现在,您将要实现pan的操作。首先,您需要存储按钮的中心,以便在完成平移后重置它。将其添加为视图控制器属性:
var buttonCenter = CGPointZero
然后执行pan操作。请注意,您可以使用手势识别器状态来确定平移的开始和结束时间:
func panButton(pan: UIPanGestureRecognizer) {
if pan.state == .Began {
buttonCenter = button.center // store old button center
} else if pan.state == .Ended || pan.state == .Failed || pan.state == .Cancelled {
button.center = buttonCenter // restore button center
} else {
let location = pan.locationInView(view) // get pan location
button.center = location // set button to where finger is
}
}
答案 1 :(得分:1)
基本上,您需要实现触控手势识别器,并在点击/移动所述按钮时将按钮的中心设置为印刷机的中心。
以下是您要执行此操作的方式:https://stackoverflow.com/a/31487087/5700898
另外,真的很酷!
答案 2 :(得分:0)
已接受答案的Swift 4和5版本:
var buttonCenter: CGPoint = .zero
viewDidLoad() {
super.viewDidLoad()
let pan = UIPanGestureRecognizer(target: self, action: #selector(YourViewController.panButton(pan:)))
button.addGestureRecognizer(pan)
}
@objc func panButton(pan: UIPanGestureRecognizer) {
if pan.state == .began {
buttonCenter = button.center // store old button center
} else if pan.state == .ended || pan.state == .failed || pan.state == .cancelled {
button.center = buttonCenter // restore button center
} else {
let location = pan.location(in: view) // get pan location
button.center = location // set button to where finger is
}
}