UITapGestureRecognizer 响应不正确的 UIView
UITapGestureRecognizer responding to incorrect UIView
我有一个 100x600 UIView
位于 ViewController
中主 UIView
的顶部。通常,我想隐藏此视图。当用户点击几个控件之一(包括主视图)时,我取消隐藏子 UIView
。点击主要 UIView
上的任意位置将隐藏它。
在 viewDidLoad 中,我有以下 UITapGestureRecognizer:
let viewTouch = UITapGestureRecognizer(target: self, action: "viewClicked:")
self.view.addGestureRecognizer(viewTouch)
viewClicked 函数如下所示:
func viewClicked(gestureRecognizer: UIGestureRecognizer) {
handleDisplayOfDropdownView()
}
handleDisplayOfDropdown 函数负责显示和隐藏子UIView
。它所做的只是调整子视图的 alpha,使其可见或不可见。
func handleDisplayOfDropdownView() {
UIView.animateWithDuration(0.5, animations: {
if !self.dropDownVisible {
self.dropDownVisible = true
self.dropDownView.alpha = 1.0
}
else {
self.dropDownVisible = false
self.dropDownView.alpha = 0
}
})
}
所有 UI 工作都是通过故事板完成的。我只是在 ViewController 的顶部放置了一个 100x600 的视图。通过点击主 UIView.
使其可见和隐藏
我遇到的问题是当我点击子 UIView
时它消失了。当我设置 UITapGestureRecognizer
时,我认为只有轻按主 UIView
才能激活和隐藏它。似乎在任何地方点击,包括子 UIView
都会隐藏它。
我 UITapGestureRecognizer
设置不正确吗?
添加手势代理:
UIGestureRecognizerDelegate
在 ViewDidLoad 中设置 viewTouch UITapGesture 委托:
viewTouch.delegate = self
然后调用这个委托
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
let p = touch.locationInView(view)
if CGRectContainsPoint(dropDownView.frame, p) {
return false
}
return true
}
我有一个 100x600 UIView
位于 ViewController
中主 UIView
的顶部。通常,我想隐藏此视图。当用户点击几个控件之一(包括主视图)时,我取消隐藏子 UIView
。点击主要 UIView
上的任意位置将隐藏它。
在 viewDidLoad 中,我有以下 UITapGestureRecognizer:
let viewTouch = UITapGestureRecognizer(target: self, action: "viewClicked:")
self.view.addGestureRecognizer(viewTouch)
viewClicked 函数如下所示:
func viewClicked(gestureRecognizer: UIGestureRecognizer) {
handleDisplayOfDropdownView()
}
handleDisplayOfDropdown 函数负责显示和隐藏子UIView
。它所做的只是调整子视图的 alpha,使其可见或不可见。
func handleDisplayOfDropdownView() {
UIView.animateWithDuration(0.5, animations: {
if !self.dropDownVisible {
self.dropDownVisible = true
self.dropDownView.alpha = 1.0
}
else {
self.dropDownVisible = false
self.dropDownView.alpha = 0
}
})
}
所有 UI 工作都是通过故事板完成的。我只是在 ViewController 的顶部放置了一个 100x600 的视图。通过点击主 UIView.
使其可见和隐藏我遇到的问题是当我点击子 UIView
时它消失了。当我设置 UITapGestureRecognizer
时,我认为只有轻按主 UIView
才能激活和隐藏它。似乎在任何地方点击,包括子 UIView
都会隐藏它。
我 UITapGestureRecognizer
设置不正确吗?
添加手势代理:
UIGestureRecognizerDelegate
在 ViewDidLoad 中设置 viewTouch UITapGesture 委托:
viewTouch.delegate = self
然后调用这个委托
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
let p = touch.locationInView(view)
if CGRectContainsPoint(dropDownView.frame, p) {
return false
}
return true
}