我有一个非典型的iOS界面。也许这不切实际,但我可以尝试一下。希望有人能帮忙!

我有一个UIVIew形式的菜单。它包含5个小的UIImageViews。 UIPinchGestureRecognizer附加到UIVIew。向内捏时,5个UIImageViews从屏幕外进行动画处理,以在窗口中间形成一个圆圈。向外挤压时,它们会在屏幕外动画。那里一切都很好。

我希望能够在应用程序中的任何时候捏屏幕以显示菜单,选择“按钮”之一(UIImageView),并加载关联的子视图。

真正的问题是,如果当前的可见视图是UIScrollView或UITableView,则我的应用无法确定菜单或其他子视图是否应该处理触摸事件。如果我真的专注并确保同时用两根手指触摸屏幕,则捏将起作用并将菜单向内拉。但否则,它将尝试滚动当前可见视图。

我希望除捏合手势(以及在菜单可见时的轻击手势)以外的所有事件,通过菜单视图传递到其余子视图。

我知道我可以重写hitTest:withEvent方法来确定用于处理事件的正确视图,但是目前尚不清楚如何正确使用它。 Apple文档或我在堆栈溢出时阅读的任何答案都没有使我明白此方法。

任何帮助深表感谢。

最佳答案

由于UITableView是UIScrollView的子类,因此它继承了UIScrollView的所有属性,包括其手势识别器。

UIScrollView声明了UIPinchGestureRecognizer和UIPanGestureRecognizer。我不确定实现细节,但我想UITableView会禁用捏手势识别器,因为您不应该能够放大tableview!

无论如何,您都可以将自己的UIPinchGestureRecognizer附加到表格视图:

UIPinchGestureRecognizer *yPGR = [[UIPinchGestureRecognizer alloc]
initWithTarget:probablySelf action:yourMenuShowSelectorHere];

UITableView *tv = ...
// ...
[tv addGestureRecognizer:yPGR];


然后,您可以确保在收紧操作失败之前,UITableView scoll不会滚动:

[tv.panGestureRecognizer requireGestureRecognizerToFail:yPGR];


这样,在确定未检测到挤压之前,UITableView将不会滚动。

编辑:UIScrollView仅在iOS 5及更高版本中使用(或至少声明对)UIGestureRecognizers。

10-08 05:28
查看更多