如果目標是具有鍋手勢/ s的防止識別滑動(通常情況):
swipeGesture.requireGestureRecognizerToFail(panGesture)
如果目標是具有滑動手勢/ s的防止識別平移(不尋常的情況下):
panGesture.requireGestureRecognizerToFail(swipeGesture)
另外做平常:
panGesture.delegate = self
swipeGesture.delegate = self
並實行shouldRecognizeSimultaneouslyWithGestureRecognizer
總是返回true
注:的東西像UIWebView
的和UIScrollView
的正確解釋單觸摸滑動,這是最好的requireGestureRecognizerToFail
所有三(3) :一個平底鍋,一個長按和第二個滑動識別器.numberOfTouchesRequired = 2
爲UX直觀地工作。
下面是我們用什麼(SWIFT):
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()
}
}
看到我這個答案可能你得到了一些想法swipeGestureRecognizer http://stackoverflow.com/questions/12423253/iphone-uigesturerecognizer-prevents -uitableview-從滾動功能於xcode中-4-5/12423565#12423565 –