首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITouch & UIEvents:对抗框架?

UITouch & UIEvents:对抗框架?
EN

Stack Overflow用户
提问于 2012-02-07 16:21:46
回答 2查看 471关注 0票数 1

设想一个视图,例如,4个子视图,彼此相邻,但不重叠。我们叫他们view#1 ..。view#4

所有5个这样的视图都是我自己的UIView子类(是的,我读过:事件处理以及iOS事件指南以及这个所以问题,还没有回答)

当用户触摸其中一个时,UIKit "hiTests“它并将后续事件传递给该视图: view#1

即使手指伸到view#1外面,也可以说view#3。

即使这个“拖放”现在已经过了view#3,view#1仍然接收touchesMoved,但是view#3没有收到任何消息。

我想让view#3开始回复这些内容。也许是我自己的"touchedEntered“,也可能是view#1上的"touchesExited”。

我该怎么做?

我能看到两种方法。

  1. 边步处理问题,并且每当我在touchesMoved边界之外检测到一个view#1时,执行父视图中的所有触摸处理。
  2. 转移到父视图,告诉它“重新分派”。不过,还不太清楚这种重新调度将如何工作。

对于我感到困惑的解决方案#2,不是转发本身,而是,而是如何找到我想要转发到的UIVIew。显然可以遍历父子视图,直到找到一个边界/帧包含触摸的子视图为止,但我想知道我是否遗漏了苹果已经提供的内容,但我无法解决这个问题。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 16:33:23

我已经这样做了,但是我使用的是CALayers而不是子UIViews。这样,就不用担心子视图捕获/重新分派事件到父UIView了。你可能无法做到这一点,但它确实简化了事情。我的解决方案倾向于经常使用CGRectContainsPoint()

票数 1
EN

Stack Overflow用户

发布于 2012-03-30 17:09:34

您可能希望再次阅读事件处理,因为它非常接近回答你的问题

与其命中测试视图相关联的触摸object...is,即使对象表示的触摸随后在视图之外移动。

如果您想要实现让不同的视图对用户的手指交叉做出反应的目标,如果您想在UIView提供的触摸处理机制内这样做,那么您应该使用第一种方法:让父视图处理触摸。父视图可以使用-hitTest:withEvent:-pointInside:withEvent:,因为它正在跟踪触摸,以确定触摸是否位于子视图中,如果是,则可以发送适当的消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9179832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档