我在主视图中有一个UIScrollView和一个Header(UIView)并且我的Header像这样在我的UIScrollView上方时出现了问题:
UIView
|
|- UIScrollView
|
|- Header (UIView)
我希望标题能够检测到其上的点击,但是我也希望滚动到标题上方时滚动视图能够滚动,由于我的标题位于上方并且正在阻止标题,因此目前无法实现滚动。
所以看起来很简单吧?,我希望我的标题能够检测到水龙头,但是将滚动前进到我的UIScrollView。
为了解决这个问题,我尝试了多种方法,其中之一是:
这是代码段:
override func viewLoad() {
myScreenEdgePanGestureRecognizer = UIPanGestureRecognizer(target: self, action:#selector(handlePan))
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action:#selector(handleTap(_:)))
headerView.addGestureRecognizer(myScreenEdgePanGestureRecognizer)
headerView.addGestureRecognizer(tapGestureRecognizer)
}
@objc func handlePan(_ sender: UITapGestureRecognizer){
print("dragging")
if headerView.isUserInteractionEnabled{
headerView.isUserInteractionEnabled = false
}
if sender.state == .began {
} else if sender.state == .ended {
headerView.isUserInteractionEnabled = true
}
}
@objc func handleTap(_ sender: UITapGestureRecognizer){
print("tapped")
}
此时,我看到如何很好地检测到拖动和点击,但是由于某种原因isUserInteractionEnabled = false似乎并没有改变视图的行为。此代码充当isUserInteractionEnabled始终为true,无论如何。
[除此之外,我还尝试过的事情:
我也在这个问题上也很挣扎,您应该尝试使用UIGestureRecognizerDelegate
的方法,该方法允许您同时处理手势。
tapGestureRecognizer.delegate = self
extension YourViewController: UIGestureRecognizerDelegate {}
实现此功能:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true }