设想一个视图,例如,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”。
我该怎么做?
我能看到两种方法。
对于我感到困惑的解决方案#2,不是转发本身,而是,而是如何找到我想要转发到的UIVIew。显然可以遍历父子视图,直到找到一个边界/帧包含触摸的子视图为止,但我想知道我是否遗漏了苹果已经提供的内容,但我无法解决这个问题。
有什么想法吗?
发布于 2012-02-07 16:33:23
我已经这样做了,但是我使用的是CALayers而不是子UIViews。这样,就不用担心子视图捕获/重新分派事件到父UIView了。你可能无法做到这一点,但它确实简化了事情。我的解决方案倾向于经常使用CGRectContainsPoint()。
发布于 2012-03-30 17:09:34
您可能希望再次阅读事件处理,因为它非常接近回答你的问题
与其命中测试视图相关联的触摸object...is,即使对象表示的触摸随后在视图之外移动。
如果您想要实现让不同的视图对用户的手指交叉做出反应的目标,如果您想在UIView提供的触摸处理机制内这样做,那么您应该使用第一种方法:让父视图处理触摸。父视图可以使用-hitTest:withEvent:或-pointInside:withEvent:,因为它正在跟踪触摸,以确定触摸是否位于子视图中,如果是,则可以发送适当的消息。
https://stackoverflow.com/questions/9179832
复制相似问题