Ios 由多个视图处理的触摸事件
我在Ios 由多个视图处理的触摸事件,ios,touch,touchesmoved,touch-event,uievent,Ios,Touch,Touchesmoved,Touch Event,Uievent,我在UITableView上有一个子类UIView。我正在使用UITableView显示一些数据,同时,我想覆盖一个跟随手指的动画(例如,留下痕迹) 如果正确,我需要通过UIView子类和UITableView处理触摸事件。我该怎么做? 是否可以在UIView子类上触发触摸移动,然后在UITableView上触发 非常感谢您的帮助。UITableView将未处理的触摸事件转发给UIView。(谷歌“响应链”) 因此,您只能在UIView中处理触摸事件。所以在你看来 touchesstart-执
UITableView
上有一个子类UIView
。我正在使用UITableView
显示一些数据,同时,我想覆盖一个跟随手指的动画(例如,留下痕迹)
如果正确,我需要通过UIView
子类和UITableView
处理触摸事件。我该怎么做?
是否可以在UIView子类上触发触摸移动
,然后在UITableView上触发
非常感谢您的帮助。UITableView将未处理的触摸事件转发给UIView。(谷歌“响应链”)
因此,您只能在UIView中处理触摸事件。所以在你看来
touchesstart-执行初始化操作
触摸移动-在UIView上绘制尾部(使用计时器/延迟响应来消除可消除的点,使其看起来像一条轨迹)
touchesend-做剩余的事情
希望这有帮助。不,你不能含蓄地这样做。章说
窗口对象使用命中测试和响应器链来查找
查看以接收触摸事件。在命中测试中,窗口调用
hitTest:withEvent:位于视图层次结构的最顶部视图上;这
方法通过递归调用每个
返回“是”的视图层次结构中的视图,沿
层次结构,直到找到在其边界内进行触摸的子视图
发生了。该视图将成为命中测试视图
所以,当窗口找到被触摸的视图时,它返回YES。当前只有一个视图可以处理触摸
但如果您需要为UITableView处理事件,请为UIView处理它!您可以使用、函数将接触点转换为所需的坐标,将子视图添加到UITableView,并根据坐标移动它,以及其他许多事情。我解决此问题的方法不是很干净,但它是有效的。如果有更好的方法,请告诉我
我已经为我的自定义ui视图
覆盖了hitTest
,以便它将触摸指向下面的ui表视图
。然后在UITableView
中,我通过touchsbegind
、touchsmoved
等方式处理手势。在UIView
中,我还调用了touchsbegind
这样,触摸由两个视图处理。
我之所以没有采取相反的做法(让UIView
的touchesbeated
调用UITableView
的touchesbeated
)是因为UITableView
上的手势识别器无法工作
UIView
subclass'hitTest
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// tview is the UITableView subclass instance
CGPoint tViewHit = [tView convertPoint:point fromView:self];
if ([tView pointInside:tViewHit withEvent:event]) return tView;
return [super hitTest:point withEvent:event];
}
UITableView
子类的touchsbegind
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:touch.view];
// ....
// view is the UIView's subclass instance
[view touchesBegan:touches withEvent:event];
}
谢谢你的回复,但我不确定我是否完全理解(尤其是我不理解第一句话的意思)。我知道我可以在UIView中绘制轨迹,但我仍然需要将触摸事件“传递”到UITableView(滚动、选择等)。对不起,如果我误解了。在Objective-C中,有一个叫做响应者链的东西。如果类不处理特定事件,则需要由其超类处理这些事件。如果没有类处理该事件,则该事件最终由NSObject处理。因此,在您的情况下,由于UIView是UITableView的超类,您可以从UIView响应UITableView事件。如果我不是Objective-C的专家,我很抱歉。。。你能举个例子说明这一点如何适用于May案吗?我是否应该拥有手势的UITableView句柄,然后将它们传递给超类?如何处理?根本不在UITableView中处理事件,只在UIView中处理事件。您认为我刚才发布的答案如何?这肯定会起作用。我可能在UIView子类下有多个元素。。。我是否需要对所有这些元素重复该过程?还有,我需要转换坐标来获得全局坐标吗?谢谢。我已经按照你的建议做了,但是我不能再滚动UITableView了。你知道为什么吗?谢谢你,太酷了。过了一会儿我想做类似的事情。谢谢你的发帖。我真的很喜欢这个。我在子视图上手动调用touchesbreated等,试图以错误的方式进行操作。这个方法非常有效!