在iOS中,我想在子视图中接收到touchesMoved
事件,即使触摸始于超级视图!理想情况下,当移动手指到达子视图时,我也想收到touchesBegan
。在超级视图中触摸开始时接收触摸移动
达到此目的的最佳方法是什么? 我想我可以在超级视图中覆盖touchesMoved:withEvent:
,做一次命中测试然后调用子视图,但有没有更好的解决方案? (我试图在超级检视中辞退急救员,但这并没有帮助)
在iOS中,我想在子视图中接收到touchesMoved
事件,即使触摸始于超级视图!理想情况下,当移动手指到达子视图时,我也想收到touchesBegan
。在超级视图中触摸开始时接收触摸移动
达到此目的的最佳方法是什么? 我想我可以在超级视图中覆盖touchesMoved:withEvent:
,做一次命中测试然后调用子视图,但有没有更好的解决方案? (我试图在超级检视中辞退急救员,但这并没有帮助)
我今天必须解决这个完全相同的问题,而我刚刚做到了。
说,你有以下 - 这正是我的情况的抽象描述:
的解决方案是重写-hitTest:withEvent:
方法。该方法的目的是返回应处理触摸的视图。
您有两种选择:在子视图中覆盖它或在主视图中覆盖它。如果你想让子视图处理所有的触摸,你可以让子视图上的-hitTest:withEvent
返回self
并完成它。在我来说,我仍然需要在按钮上的主要观点有其自己的触摸检测,所以我定盘覆盖上,而不是主视图中-hitTest:withEvent:
方法,如下所示:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(self.myButton.frame, point))
{
return self.myButton;
}
else
{
return self.mySubView;
}
}
这就像一个绝对的魅力!希望这也适用于你:-)
你当然应该修改-hitTest:withEvent:
内的细节以满足你的特定需求 - 也许你想限制这个覆盖到一个特定的区域或一组特定的控制 - 但问题的关键在于这个线程主要问题的答案在于这种-hitTest:withEvent:
方法的重载。
Erik
您是否设法找到解决方案?我遇到类似的问题,触摸被触发,并在屏幕上添加新的“UIView”。我需要在新的'UIView'中捕获'touchesMoved'事件,而不会从屏幕上释放手指......提前致谢! – 2012-08-30 11:56:33
我将在本周末晚些时候处理这个完全相同的问题。如果我找出解决方案,我会在这里发布。 – 2015-03-20 21:32:49