iPhone-捕捉水平滑动-之前-子视图
我有一个视图,可以回到以前的视图 假设这是一份调查问卷。所以我的主要观点是questionnaireView(控制器),它有一个子视图,显示了一个问题和两个可能的答案。当回答问题时,按next,questionnaireView(控制器)在该特定子视图中显示下一个问题。很简单,对吧 好的,现在想象一下,对于一个特定的问题,必须容纳多达10个Anwer。这需要在子视图中实现一个scrollview,以适应问题+所有答案 现在我的问题是:我希望questionnaireView(控制器)收到水平滑动的通知(下一个/上一个问题),但我希望所有其他触摸(轻触,用于答案的单选按钮,垂直滑动用于滚动视图)都能通过 你知道怎么做吗?我尝试了5种不同的方法,每种方法都让我的头脑和动机崩溃:/ 最后一个(也是最简单的一个)只是简单地将另一个子视图添加到questionnaireView(控制器),覆盖了问答视图 这很好地捕捉了我所有的触摸开始/移动/结束/取消,但即使我只是在每个方法中提出了一个建议([self nextResponder]),底层视图(带有答案和滚动视图)也不会再响应了 我有点迷茫了,我想有一天写我自己的Scrollview,因为UIScrollView是iPhone开发者面临的最可怕的怪物:piPhone-捕捉水平滑动-之前-子视图,iphone,uiviewcontroller,uiscrollview,gestures,swipe,Iphone,Uiviewcontroller,Uiscrollview,Gestures,Swipe,我有一个视图,可以回到以前的视图 假设这是一份调查问卷。所以我的主要观点是questionnaireView(控制器),它有一个子视图,显示了一个问题和两个可能的答案。当回答问题时,按next,questionnaireView(控制器)在该特定子视图中显示下一个问题。很简单,对吧 好的,现在想象一下,对于一个特定的问题,必须容纳多达10个Anwer。这需要在子视图中实现一个scrollview,以适应问题+所有答案 现在我的问题是:我希望questionnaireView(控制器)收到水平滑动
请注意,我支持iPhone OS 3.0及更高版本,因此新的手势API是不可行的。我不确定你所说的“每种方法的前进”是什么意思。我不确定nextResponder是否适合转发给任何一方 问题是,触摸应该在其整个生命周期中由一个视图“拥有”。我不确定UIScrollView或手势识别器是如何实现的,但我非常确定它们所做的比您自己应该做的更多 我将覆盖QuestionnaReview的
hitTest:withEvent:
以返回self
。在touchestart:withEvent:,调用[super-hitTest:[touch-locationInView:self]withEvent:event]
并存储“拥有”它的子视图。在touchesMoved:withEvent:中,将触摸转发到相关子视图,但如果检测到手势,“忘记”拥有触摸的子视图,而是调用touchesCancelled:withEvent:。在touchesEnded/Cancelled:withEvent:,将其转发到子视图,然后忘记拥有的子视图
这很恶心,但基本上是有效的。有些事情会出错(从子视图的角度):
- -[UIEvent touchesForView:]将返回问题回顾
- UITouch.view将返回问题回顾
- UITouch.phase可能未在touch中取消UITouch phase取消:with event:(如果检测到手势并取消触摸)。 *