Iphone UISwipegestureRecognitor和UIPangestureRecognitor在一个视图中出现问题
我有以下代码:Iphone UISwipegestureRecognitor和UIPangestureRecognitor在一个视图中出现问题,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,我有以下代码: UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHighlightReadingVC:)]; swipeGestureRecognizer.delegate = self; [self.highlightReadingVC_.view addGestur
UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHighlightReadingVC:)];
swipeGestureRecognizer.delegate = self;
[self.highlightReadingVC_.view addGestureRecognizer:swipeGestureRecognizer];
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHighlightReadingVC:)];
panGestureRecognizer.delegate = self;
[panGestureRecognizer requireGestureRecognizerToFail:swipeGestureRecognizer];
[self.highlightReadingVC_.view addGestureRecognizer:panGestureRecognizer];
我的问题是,尽管我在视图上滑动,但它总是首先检测平移手势。我希望在平移/拖动之前首先识别滑动。如何操作?您需要将两个
UIgestureRecognitor
的委托之一设置为有意义的对象(可能是self
),然后听录音,并返回YES
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
当手势识别器
或其他手势识别器
识别手势会阻止其他手势识别器识别其手势时,调用此方法。注意,返回YES
保证允许同时识别;另一方面,返回否
,不能保证阻止同时识别,因为另一个手势识别器的代理可能返回是
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
我在我的应用程序中也遇到了同样的问题&它对我来说很好。因此,它可能会解决您的问题。如果目标是让平移手势/s阻止识别滑动(通常情况下):
如果目标是让滑动手势/s阻止识别平移(异常情况): 也要做通常的事情:
panGesture.delegate = self
swipeGesture.delegate = self
并使用手势识别器实现应同时识别,以始终返回true
注意:对于UIWebView
和UIScrollView
等内容,要正确理解单触式刷卡,最好是要求检测识别器发送邮件
以下三(3)项:,长按并使用.numberOfTouchesRequired=2的第二个刷卡识别器,用户体验才能直观地工作
以下是我们使用的(Swift):
看看我的答案,你可以从中得到一些关于SwipegestureRecognitor的想法吗
panGesture.delegate = self
swipeGesture.delegate = self
class AboutViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet var webView: UIWebView!
var swipeToDismiss: UISwipeGestureRecognizer {
var r = UISwipeGestureRecognizer(target: self, action: "dismiss:")
r.direction = .Right
r.delegate = self
r.requireGestureRecognizerToFail(longPress)
r.requireGestureRecognizerToFail(pan)
r.requireGestureRecognizerToFail(doubleSwipe)
return r
}
var doubleSwipe: UISwipeGestureRecognizer {
var r = UISwipeGestureRecognizer()
r.direction = .Right
r.delegate = self
r.numberOfTouchesRequired = 2
return r
}
var longPress: UILongPressGestureRecognizer {
var r = UILongPressGestureRecognizer()
r.allowableMovement = 4000.0
r.delegate = self
return r
}
var pan: UIPanGestureRecognizer {
var r = UIPanGestureRecognizer()
r.delegate = self
return r
}
func dismiss(recognizer: UISwipeGestureRecognizer!) {
// ...popViewControllerAnimated(true)
}
private func setupWebView() {
// ...
webView.addGestureRecognizer(longPress)
webView.addGestureRecognizer(swipeToDismiss)
webView.addGestureRecognizer(pan)
webView.addGestureRecognizer(doubleSwipe)
}
// MARK: - UIGestureRecognizerDelegate
func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
println("gesture start: \(gestureRecognizer)")
return true
}
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
println("multiple gestures: \(gestureRecognizer), \(otherGestureRecognizer)")
return true
}
// MARK: - UIViewController
override func viewDidLoad() {
super.viewDidLoad()
setupWebView()
}
}