【发布时间】:2018-09-19 13:34:44
【问题描述】:
我正在开发一个 iOS 绘图应用程序,其主要功能是用户可以加载图像作为背景,然后他可以开始在其上绘制手指,缩放和平移图像,并在图像本身顶部绘制.
应用程序的架构如下。
MainUiView->UIScrollView->UIImageView
在UIResponder 的touchesBegan、touchesMoved、touchesEnded 覆盖上管理手指的绘制和跟踪。
UIImageView 的缩放和平移由 UIScrollViewDelegate 实现管理。
我有一个按钮,可以通过以下方式将应用程序模式从绘图模式切换到缩放和平移模式:
如果你想画画:
[scrollView setUserInteractionEnabled:NO];
[imageView setUserInteractionEnabled:YES];
所以触摸是在touchesBegan、touchesMoved、touchesEnded 方法中管理的。
如果您想用两根手指使用捏合缩放手势进行平移和缩放
[scrollView setUserInteractionEnabled:YES];
[imageView setUserInteractionEnabled:NO];
所以两个手指手势由UIScrollViewDelegate管理
现在我正在尝试改进应用程序,移除按钮以从绘制模式切换到缩放和平移模式。
我的想法是在touchesBegan 中跟踪两个手指的存在,然后在UIImageView 中禁用用户交互以启用滚动视图中的用户交互,但问题是这样做之后触摸仍然在touchesMoved 方法中管理,直到我将手指从屏幕上抬起之前,scrollViewDelegate 什么都不会出现,之后,如果我再次将手指放在屏幕上,一切都由scrollViewDelegate 管理。
总结一下:是否可以在touchesBegan 之后停止触摸循环并将其传播到ScrollViewDelegate?
如果这不可能,我如何在UImageView 上实现缩放、平移和绘图功能?我应该删除滚动视图并尝试通过UIResponder 方法缩放和平移UImageView 吗?
感谢您的帮助
【问题讨论】:
-
看到你贴的代码,好像你用的是objc而不是swift,对吗?
-
在我使用 c# 的应用程序中,因为该应用程序是在 Xamarin.iOS 中制作的,但你是对的,我发布的代码是 objc。我将更新标签添加 objc ..我真的不介意我可以同时处理的代码。
标签: ios objective-c swift