0

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

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

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

4

2 回答 2

4

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

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

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

于 2009-02-04T22:12:35.927 回答
0

谢谢你的建议布拉德。我最终使用的解决方案是扩展 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: 的信息只能告诉我内容框架的大小,但我还需要其中的偏移量。

于 2009-02-13T17:38:59.533 回答