我有一个100x600UIView坐在aUIView中主ViewController的顶部。通常,我想隐藏这个视图。当用户点击其中一个控件(包括主视图)时,我会取消隐藏子控件。轻触mainUIView上的任何位置都会隐藏它。
在viewdidload中,我有以下uitapgesturerecognizer:

    let viewTouch = UITapGestureRecognizer(target: self, action: "viewClicked:")
    self.view.addGestureRecognizer(viewTouch)

viewClicked函数如下所示:
func viewClicked(gestureRecognizer: UIGestureRecognizer) {
    handleDisplayOfDropdownView()
}

handledisplayfdropdown函数负责显示和隐藏subUIView。它所做的就是调整子视图的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使其可见和隐藏。
我遇到的问题是,当我点击SubUIView时,它就会消失。当我设置UIView时,我发现只有点击主UITapGestureRecognizer才会激活并隐藏它。似乎在任何地方点击,包括subUIView都在隐藏它。
我设置的UIView是否不正确?

最佳答案

添加GestureDelegate:

 UIGestureRecognizerDelegate

在VIEWDIDLOAD中,设置VIEWTOUCH UITAPPESTENCE委托:
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
  }

08-26 04:00