如何启用单点触摸来处理 UILongPressGestureRecognizer 和 UIPanGestureRecognizer?
How do I enable a single touch to handle both UILongPressGestureRecognizer and UIPanGestureRecognizer?
我只想在检测到长按后实现平移手势。我正在监视 "UIGestureRecognizerState.Changed" 的长按手势,并调用我的选择器来处理那里的平移。选择器触发(我的 "print()" 检查显示在控制台中),但我必须在 uiview (blueRec) 实际上 move/translate.
之前抬起手指
我知道长按和平移手势本质上都是连续的,但我如何使用触发长按的初始按下同时平移触摸的 uiview (blueRec)?我不相信这是一个案例
- requireGestureRecognizerToFail:
我已经精简了下面的代码,只包含基本行。
@IBOutlet weak var graySuper: UIView!
@IBOutlet weak var blueRec: UIView!
@IBOutlet weak var blueLeading: NSLayoutConstraint!
@IBOutlet weak var blueTop: NSLayoutConstraint!
var longPressGesture:UILongPressGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
self.longPressGesture = UILongPressGestureRecognizer(target:self, action:"handleLongpress:")
self.longPressGesture.minimumPressDuration = 2
self.blueRec.addGestureRecognizer(self.longPressGesture)
}
func handleLongpress(sender:UILongPressGestureRecognizer) {
print("LPress")
switch (sender.state) {
case UIGestureRecognizerState.Began:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Changed:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Ended:
print("Press Ended ")
break;
default:
break;
}
}
我正在回答我自己的问题,因为这是一个非常基本的解决方案,目前我还没有解决。希望这至少对某人有所帮助。
长按手势足以跟踪可拖动对象的移动,不需要单独的平移手势,因为它出现在我的原始代码中。
@IBOutlet weak var graySuper: UIView!
@IBOutlet weak var blueRec: UIView!
@IBOutlet weak var blueLeading: NSLayoutConstraint!
@IBOutlet weak var blueTop: NSLayoutConstraint!
var longPressGesture:UILongPressGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
self.longPressGesture = UILongPressGestureRecognizer(target:self, action:"handleLongpress:")
self.longPressGesture.minimumPressDuration = 2
self.blueRec.addGestureRecognizer(self.longPressGesture)
}
func handleLongpress(sender:UILongPressGestureRecognizer) {
print("LPress")
switch (sender.state) {
case UIGestureRecognizerState.Began:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Changed:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Ended:
print("Press Ended ")
break;
default:
break;
}
我只想在检测到长按后实现平移手势。我正在监视 "UIGestureRecognizerState.Changed" 的长按手势,并调用我的选择器来处理那里的平移。选择器触发(我的 "print()" 检查显示在控制台中),但我必须在 uiview (blueRec) 实际上 move/translate.
之前抬起手指我知道长按和平移手势本质上都是连续的,但我如何使用触发长按的初始按下同时平移触摸的 uiview (blueRec)?我不相信这是一个案例 - requireGestureRecognizerToFail:
我已经精简了下面的代码,只包含基本行。
@IBOutlet weak var graySuper: UIView!
@IBOutlet weak var blueRec: UIView!
@IBOutlet weak var blueLeading: NSLayoutConstraint!
@IBOutlet weak var blueTop: NSLayoutConstraint!
var longPressGesture:UILongPressGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
self.longPressGesture = UILongPressGestureRecognizer(target:self, action:"handleLongpress:")
self.longPressGesture.minimumPressDuration = 2
self.blueRec.addGestureRecognizer(self.longPressGesture)
}
func handleLongpress(sender:UILongPressGestureRecognizer) {
print("LPress")
switch (sender.state) {
case UIGestureRecognizerState.Began:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Changed:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Ended:
print("Press Ended ")
break;
default:
break;
}
}
我正在回答我自己的问题,因为这是一个非常基本的解决方案,目前我还没有解决。希望这至少对某人有所帮助。
长按手势足以跟踪可拖动对象的移动,不需要单独的平移手势,因为它出现在我的原始代码中。
@IBOutlet weak var graySuper: UIView!
@IBOutlet weak var blueRec: UIView!
@IBOutlet weak var blueLeading: NSLayoutConstraint!
@IBOutlet weak var blueTop: NSLayoutConstraint!
var longPressGesture:UILongPressGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
self.longPressGesture = UILongPressGestureRecognizer(target:self, action:"handleLongpress:")
self.longPressGesture.minimumPressDuration = 2
self.blueRec.addGestureRecognizer(self.longPressGesture)
}
func handleLongpress(sender:UILongPressGestureRecognizer) {
print("LPress")
switch (sender.state) {
case UIGestureRecognizerState.Began:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Changed:
self.blueRec.center = sender.locationInView(self.graySuper)
break;
case UIGestureRecognizerState.Ended:
print("Press Ended ")
break;
default:
break;
}