我有一个菜单控制器,当它弹出时有一个集合视图。它的工作方式是当用户点击集合视图外部时,它应该使菜单解除。当您在集合视图外部点击时,菜单会消失,但当您在集合视图中点击时,它也会消失。我似乎无法让手势识别器只在不在集合视图中时才会被忽略。我在这里和谷歌一起环顾四周,但我还没有找到任何有效的解决方案。以下是处理点击的函数的代码:
@IBAction func handleTap(sender: MenuTapGestureRecognizer)
{
if (sender.state == .Ended && sender.view == menuCollectionView)
{
NSLog("menuCollectionView")
}
else if (sender.state == .Ended && sender.view == mainView)
{
self.dismissViewControllerAnimated(true, completion: nil)
}
}
mainView
是连接到最顶层视图的引用,menuCollectionView
是对UICollectionView的引用。
答案 0 :(得分:2)
我怀疑您只是将手势识别器附加到mainView
。这很好,但您需要使用sender.locationInView(menuCollectionView)
并检查该点是否在您的集合视图的范围内。这可以通过以下方式完成:
if (CGRectContainsPoint(menuCollectionView.bounds, sender.locationInView(menuCollectionView))) {
// do stuff.
}