【问题标题】:Objective-C How can I detect multitouch that come from many subviewObjective-C如何检测来自许多子视图的多点触控
【发布时间】:2011-08-09 03:25:20
【问题描述】:

目标-C

假设我的主视图名称包含三个子视图 A、B 和 C。

A 是滚动视图。 B 和 C 都是图像视图。

我需要在主视图上检测多点触控。例如,如果您用两根手指触摸屏幕,则会显示警告框。

如果两个手指在同一个子视图上触摸就OK了。

但是如果一个手指触摸视图 B 而另一个手指触摸视图 C 则会出现问题,因为主视图接收到 2 个连续触摸而不是多点触摸。

不知道有没有办法解决这个问题?

感谢您的每一个回答。

【问题讨论】:

    标签: objective-c ios ipad multi-touch


    【解决方案1】:

    你可以这样做 -

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(multiTap:)];
    [tap setNumberOfTapsRequired:1];
    [tap setNumberOfTouchesRequired:1];
    [self.yourView addGestureRecognizer:tap];
    [tap release];
    

    您可以实现处理此事件的multiTap。但可选地,您尝试做的事情可能会让用户感到困惑。无论如何,这是你的电话。从技术上讲,这是可能的......

    【讨论】:

    • 这是一个点击手势识别器。如果我点击 2 个子视图,我怎么知道。
    • 也为该视图添加一个处理程序...如果您的视图数量过多,那么您可能需要重新考虑您的方法
    • 是的,您可以为许多子视图添加手势识别器,但它仍然会发送顺序单点触控事件而不是多点触控事件
    【解决方案2】:

    理论上,探索的一种可能的解决方案是首先添加一个透明玻璃视图,作为主视图的子视图,因此它将是视图 A、B、C 的兄弟,可以接收所有点击。附加一个UITapGestureRecognizer,并在所有子视图上设置一个UIGestureRecognizerDelegate,以相互排除视图D和A中的手势识别,方法是shouldRecognizeSimultaneouslyWithGestureRecognizer。

    在实践中,恕我直言,最好的解决方案是根本不面对这个问题,而不是尝试识别可能落在不同子视图上的多指点击,而是进行捏合和缩放识别(UIPinchGestureRecognizer),因为它不会与常规的 UITapGestureRecognizers,你不会有这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      相关资源
      最近更新 更多