从绑定到多个 UIButtons 的 GestureRecognizer 获取发件人信息
Get Sender info from GestureRecognizer tied to multi UIButtons
所以我有一个 UILongPressGestureRecognizer
连接到
@IBAction func PresentPlayerInfo(sender: UIGestureRecognizer){
if let button = sender.view as? UIButton {
buttonSourceFrame = button.frame.origin}
performSegueWithIdentifier("PVC", sender: self)
}
buttonSourceFrame
然后传递给 prepareForSegue
中的下一个 ViewController
我想将这个 1 UILongPressGestureRecognizer
连接到多个 UIButton
,这样我就不必为每个 UIButton
创建一个 UILongPressGestureRecognizer
。
但是当我将多个 UIButton
连接到一个 gestureRecognizer 时...无论我按哪个按钮,转场都很好,但是传递的 CGPoint
总是那个UIButton
位于列表的顶部(这里是 3),而不是 UIButton
按下的 CGPoint
。
是否可以将 GestureRecognizer
连接到多个 UIButton
并仍然获得发件人信息...或者我是否必须每个创建一个 GestureRecognizer
UIButton
?
A gestureRecognizer
只有一个 view
属性,记录在案 here。通常为每个要识别手势的 UI 元素创建一个单独的元素。如果你想创建一个识别器然后计算出哪个按钮被按下,你需要将识别器附加到包含所有按钮的单个视图,然后计算出按下的位置(比如)locationInView
,考虑到任何自动布局更改的影响。就个人而言,我只会创建所有单独的识别器。
将手势识别器连接到 viewController 的主视图。然后,在您的 @IBAction
中,您必须确定被点击的视图:
@IBAction func PresentPlayerInfo(sender: UIGestureRecognizer){
var tappedView: UIView?
var loc = sender.locationInView(self.view) // self.view is the parent view of the buttons
if (CGRectContainsPoint(self.button1.frame, loc)) {
tappedView = self.button1
}
else if (CGRectContainsPoint(self.button2.frame, loc)) {
tappedView = self.button2
}
performSegueWithIdentifier("PVC", sender: tappedView)
}
所以我有一个 UILongPressGestureRecognizer
连接到
@IBAction func PresentPlayerInfo(sender: UIGestureRecognizer){
if let button = sender.view as? UIButton {
buttonSourceFrame = button.frame.origin}
performSegueWithIdentifier("PVC", sender: self)
}
buttonSourceFrame
然后传递给 prepareForSegue
我想将这个 1 UILongPressGestureRecognizer
连接到多个 UIButton
,这样我就不必为每个 UIButton
创建一个 UILongPressGestureRecognizer
。
但是当我将多个 UIButton
连接到一个 gestureRecognizer 时...无论我按哪个按钮,转场都很好,但是传递的 CGPoint
总是那个UIButton
位于列表的顶部(这里是 3),而不是 UIButton
按下的 CGPoint
。
是否可以将 GestureRecognizer
连接到多个 UIButton
并仍然获得发件人信息...或者我是否必须每个创建一个 GestureRecognizer
UIButton
?
A gestureRecognizer
只有一个 view
属性,记录在案 here。通常为每个要识别手势的 UI 元素创建一个单独的元素。如果你想创建一个识别器然后计算出哪个按钮被按下,你需要将识别器附加到包含所有按钮的单个视图,然后计算出按下的位置(比如)locationInView
,考虑到任何自动布局更改的影响。就个人而言,我只会创建所有单独的识别器。
将手势识别器连接到 viewController 的主视图。然后,在您的 @IBAction
中,您必须确定被点击的视图:
@IBAction func PresentPlayerInfo(sender: UIGestureRecognizer){
var tappedView: UIView?
var loc = sender.locationInView(self.view) // self.view is the parent view of the buttons
if (CGRectContainsPoint(self.button1.frame, loc)) {
tappedView = self.button1
}
else if (CGRectContainsPoint(self.button2.frame, loc)) {
tappedView = self.button2
}
performSegueWithIdentifier("PVC", sender: tappedView)
}