我一直在研究各种方法来编写我正在构建的应用程序的触摸事件响应,我对我正在阅读的内容感到有点困惑。
据我所知,iOS中有两种普遍接受的触摸响应方法:手势识别和触摸识别。
何时适合使用其中一种?
特别针对我正在构建*:
我正在为一个视图编写一个控件,该视图需要在用户触摸的屏幕上放置项目(UIImageViews),并在用户拖动时移动它们。控制器正在与一个单独的模型进行通信,因此我需要精确控制何时在触摸事件期间向模型发送消息。
模型需要知道用户首次触摸屏幕的位置(未启用多点触控)以及用户从屏幕上抬起的位置。我需要在用户第一次触摸时查询模型,以便了解用户是否意味着编辑图像视图的位置或创建新图像,我需要向模型发送关于用户抬起屏幕的位置的消息该模型可以更新。在拖动事件期间,我还需要向模型发送常量查询,以确定用户在任何给定时刻悬停的位置是否有效。
起初我以为我可以使用平移手势识别器来完成工作,但是当我进一步研究它时,我无法找到一种方法来设置自定义函数调用,在触摸,拖动和升空事件(如果有办法,很高兴知道)。我找到了UIResponder方法,但仍然是要使用的方法,或者最好只使用iOS6中的手势识别器?
*代码不包括在内,因为这个问题的范围相当大,我不想分散那些不必要的细节。
答案 0 :(得分:1)
我来到这里是因为我正在研究UIGestureRecognizer
与基于UIResponder
的触摸事件方法相比的效率,因为我将它们用于低延迟应用程序。对于一般用途,我可以确认您可以覆盖touchesBegan/Moved/Ended/Cancelled
子类或UIView
子类(添加到UIGestureRecognizer
)中的UIView
等方法,甚至是在UIViewController
子类中(它是响应者链的一部分,如UIView
)。
您还可以像Pan GR一样子类化特定的UIGestureRecognizer
并覆盖这些方法,以便在利用已经检测到的功能的同时实现其他功能。请务必致电super
(在上述所有情况下)并且您可能希望检查或更新state
属性。
至于我的关于哪个更有效率的问题,我还不知道,但我想它几乎相当。