我想使用 UIScrollView 的滚动/平移功能,但我想自己处理所有缩放和缩放。我当前的计划是拥有一个拥有 UIView(我将其称为 view1)的 viewController,其中包含多个 UIView 和 UIScrollView 作为子项。

view1 是否可以处理所有多点触摸事件(以便手动渲染所有子级的缩放状态)并将结果绘制到每个相应的滚动视图上以允许用户滚动结果?

(出于好奇,该应用程序正在绘制多个热图,每个热图都有自己的一组轴。缩放或滚动时,轴需要更新自身以正确标记数据区域(滚动视图)中表示的范围。我无法使用滚动视图免费附带的默认上下文图像缩放缩放的原因是,在上下文缩放上绘制的任何内容(包括参考线之类的内容)。缩放操作实际上并不是使事物变大,而是调整可视数据范围。)

有帮助吗?

解决方案 2

感谢您的建议,布拉德。我结束了使用的解决方案是延伸的UIScrollView并重写touchesMoved:withEvent:方法方法与此:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([[event touchesForView:self] count] == 1) 
         [super touchesMoved:touches withEvent:event];
    [content touchesMoved:touches withEvent:event];
}

其中,“内容”是指向我的滚动视图的内容子视图。我因为我的内容需要放大至点(即,用户的手指下的数据空间中的点不应该改变)来完成这种方式。发送到的setTransform的信息:只能告诉我的内容框架的大小,但我还需要抵消了进去。

其他提示

您确实可以让主托管视图拦截多点触控事件并以编程方式缩放底层 UIView。这就是我在 OpenGL 显示部分所做的 我的应用程序 (来源可用 这里)。您仍然可以将单点触摸事件传递到底层滚动视图以进行平移等。

但是,仍然可能有一种方法可以在不拦截触摸事件的情况下执行您所描述的操作。UIScrollView 通过对内容视图应用转换来执行默认缩放。回应 这个问题, ,我描述了一种在捏缩放完成后以新比例重新渲染内容视图的方法。缩放完成后,您可以使用清晰的网格线刷新绘图。

此外,如果您没有真正缩放并且想要通过捏缩放来更改视图的另一个属性,您可以执行我在该问题中描述的操作并拦截 contentView 上的转换设置,只是不要应用转换。您可以从该转换中提取 UIScrollView 想要设置的比例,并根据需要对视图进行自定义重绘。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top