允许单个触摸事件通过UIScrollView

时间:2017-04-24 15:01:32

标签: uiscrollview uikit touchesmoved

我有一个视图drawingView用于绘制我使用touchesBegan,Moved,End的位置,以将曲线添加到呈现它们的子视图renderingView。我还想在同一个屏幕上支持缩放和平移,因此我添加了UIScrollView作为drawingView的子视图,并在我的scrollView委托的renderingView方法中返回viewForZooming

现在,所有缩放/平移都有效。 renderingView放大,仍然显示贝塞尔曲线,我可以平移放大的渲染等等。但是,我的初始功能是通过使用{{1}的touches *方法实际绘制到renderingView 1}}不再起作用,因为scrollview是一个子视图并且正在消耗触摸事件。

我愿意将scrollview的平移设置为最少2个手指的手势,因此缩放/捏合和平移将是2个手指的手势,为drawingView处理单个手指触摸留出空间*事件添加路径信息。

现在,我找到了一种方法(尽管看起来像是一种黑客攻击),通过迭代手势并检查其平移手势,将scrollview的平移手势设置为至少两次手指触摸。但是,将此设置为最少两个手指触摸,不允许我的canvasView开始获取触摸事件。我怎么能这样做?

TL; DR

canvasView子视图正在吃其超级视图的touchesBegan / Moved / Ended事件。我怎么能解决这个问题呢?我愿意将scrollView的事件限制为两个手指手势,并让单手手势由超级视图处理??

1 个答案:

答案 0 :(得分:0)

考虑使用手势识别器,它会让您的生活更轻松。还可以使用单个视图来获取触摸事件,并将触摸数据传递给其他对象。

使用UIPinchRecognizer进行缩放和平移,使用UIPanRecognizer进行实际绘图。您可以将UIPanRecognizer.maximumNumberOfTouches设置为1.

您可能需要查看Apple网站上的实施细节。

https://developer.apple.com/reference/uikit/uigesturerecognizer