gpt4 book ai didi

ios - 将 UITouch 管理从 TouchBegan 切换到 UIScrollViewDelegate

转载 作者:行者123 更新时间:2023-11-30 11:08:49 25 4
gpt4 key购买 nike

我正在开发一个iOS绘图应用程序,其主要功能是用户可以加载图像作为背景,然后他可以开始在其上面进行手指绘图,缩放和平移图像,并在图像本身之上进行绘制.

应用程序的架构如下所示。

MainUiView->UIScrollView->UIImageView

手指绘制和跟踪是在 UIRespondertouchesBegantouchesMovedtouchesEnded 覆盖上进行管理的。

UIImageView 的缩放和平移由 UIScrollViewDelegate 实现管理。

我有一个按钮,可以通过以下方式将应用程序模式从绘图模式切换到缩放和平移模式:

如果你想画画:

    [scrollView setUserInteractionEnabled:NO];
[imageView setUserInteractionEnabled:YES];

因此触摸是在 touchesBegantouchesMovedtouchesEnded 方法中管理的。

如果您想使用两根手指使用捏合缩放手势进行平移和缩放

[scrollView setUserInteractionEnabled:YES]; 
[imageView setUserInteractionEnabled:NO];

因此两个手指手势由 UIScrollViewDelegate

管理

现在我正在尝试改进应用程序,删除从绘图切换到缩放和平移模式的按钮。

我的想法是跟踪 touchesBegan 中的两根手指的存在,然后禁用 UIImageView 中的用户交互以启用 ScrollView 中的用户交互,但是问题是,执行此操作后,触摸仍然在 touchesMoved 方法中进行管理,在我将手指从屏幕上抬起之前,scrollViewDelegate 没有任何内容,之后,如果我平移手指再次在屏幕上,一切都由 scrollViewDelegate 管理。

总结一下:是否可以在 touchesBegan 之后停止触摸周期并将其传播到 ScrollViewDelegate

如果这是不可能的,我如何在UImageView上实现缩放、平移和绘图功能?我应该删除 ScrollView 并尝试通过 UIResponder 方法缩放和平移 UImageView 吗?

感谢帮助

最佳答案

尝试更改您的实现以使用手势识别器,而不是使用 UIResponder 方法进行触摸处理。这种方法的主要好处是:

  • 您可以use UIPanGestureRecognizer for drawing ,甚至创建一个 custom recogniser
  • 您可以使用以下方法在识别器之间建立依赖关系 requireGestureRecognizerToFail ,甚至跨 View
  • 您可以循环浏览 View 上的所有识别器并仅禁用特定的一组手势,而无需禁用整个 View 上的触摸
  • 手势识别器具有相同的触摸相关方法,您可以使用这些方法将触摸处理代码从当前实现移至手势

因此,您的 ImageView 将具有平移或自定义手势识别器,只需单点触摸即可进行绘图,并且您可以循环遍历 ScrollView 的识别器,并使用 标记它们在触发“绘制”手势时不会触发requireGestureRecognizerToFail

有了这个,您不需要在任何 View 上启用/禁用用户交互,尽管您必须进行反复试验才能使所有手势正确地相互配合。

祝你编码愉快:)

关于ios - 将 UITouch 管理从 TouchBegan 切换到 UIScrollViewDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52407161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com