Iphone 如何实现我自己的缩放,但仍然可以访问UIScrollView';什么是滚动?

Iphone 如何实现我自己的缩放,但仍然可以访问UIScrollView';什么是滚动?,iphone,objective-c,zooming,Iphone,Objective C,Zooming,我想使用UIScrollView的滚动/平移功能,但我想自己处理所有的缩放和缩放。我目前的计划是拥有一个拥有多个UIView和UIScrollView作为子对象的UIView(我称之为view1)的viewController view1是否可以处理所有多点触控事件(以便手动呈现其所有孩子的缩放状态),并将结果绘制到每个相应的滚动视图上,以允许用户滚动结果 (出于好奇,该应用程序正在绘制多个热图,每个热图都有自己的轴集。在缩放或滚动时,轴需要自我更新以正确标记数据区域(滚动视图)中表示的范围)。

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

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


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

您确实可以让主宿主视图截获多点触控事件,并以编程方式缩放基础UIView。这就是我在(源代码可用)的OpenGL显示部分所做的。您仍然可以将单触事件传递到底层滚动视图以进行平移等操作

但是,仍然有一种方法可以在不拦截触摸事件的情况下执行您描述的操作。UIScrollView通过对内容视图应用变换来进行默认缩放。作为响应,我描述了一种在收缩缩放完成后以新比例重新渲染内容视图的方法。这将允许您在缩放完成后使用锐利的网格线刷新图形


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

您确实可以让主宿主视图截取多点触控事件,并以编程方式缩放基础UIView。这就是我在(源代码可用)的OpenGL显示部分所做的。您仍然可以将单触事件传递到底层滚动视图以进行平移等操作

但是,仍然有一种方法可以在不拦截触摸事件的情况下执行您描述的操作。UIScrollView通过对内容视图应用变换来进行默认缩放。作为响应,我描述了一种在收缩缩放完成后以新比例重新渲染内容视图的方法。这将允许您在缩放完成后使用锐利的网格线刷新图形


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

谢谢你的建议,布拉德。我最终使用的解决方案是扩展UIScrollView,并使用以下内容覆盖TouchsMoved:withEvent:方法:

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

其中“content”是指向我的scrollview的content子视图的指针。我不得不这样做,因为我的内容需要缩放到点(即,用户手指下的数据空间中的点不应该改变)。发送到setTransform:的信息只能告诉我内容帧的大小,但我还需要偏移量

谢谢你的建议,布拉德。我最终使用的解决方案是扩展UIScrollView,并使用以下内容覆盖TouchsMoved:withEvent:方法:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([[event touchesForView:self] count] == 1) 
         [super touchesMoved:touches withEvent:event];
    [content touchesMoved:touches withEvent:event];
}
其中“content”是指向我的scrollview的content子视图的指针。我不得不这样做,因为我的内容需要缩放到点(即,用户手指下的数据空间中的点不应该改变)。发送到setTransform:的信息只能告诉我内容帧的大小,但我还需要偏移量