1

我有一个非典型的 iOS 界面。也许这不实用,但我正在尝试。希望有人能帮忙!

我有一个 UIVIew 形式的菜单。它包含 5 个小的 UIImageViews。UIPinchGestureRecognizer 附加到 UIVIew。当向内捏合时,5 个 UIImageView 会从屏幕外动画化,在窗口中间形成一个圆圈。当向外捏时,它们会在屏幕外显示动画。那里一切都很好。

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

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

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

我知道我可以重写 hitTest:withEvent 方法来确定处理事件的正确视图,但目前我不清楚如何准确地使用它。Apple 文档和我在堆栈溢出方面阅读的任何答案都没有让我清楚地了解这种方法。

任何帮助深表感谢。

4

1 回答 1

0

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

UIScrollView 声明了一个 UIPinchGestureRecognizer 和 UIPanGestureRecognizer。我不确定实现细节,但我想 UITableView 会禁用捏合手势识别器,因为您不应该能够缩放表格视图!

在任何情况下,您都可以将自己的 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。

于 2012-08-24T10:48:04.447 回答