将两个UIScrollView连接在一起

这是我一直在努力研究的一个棘手的iPhone问题。 我在页面上有三个UIScrollView,一个只能水平滚动,一个只能垂直滚动,一个可以水平和垂直滚动。 我想一起锁定视图,以便水平滚动视图的水平位置与主滚动视图的水平位置以及垂直滚动视图相匹配,以便拖动主滚动视图可控制水平滚动视图和垂直滚动视图。

问题是,我完全难倒了。 我在苹果文档里面浏览过,但似乎没有办法正式做到这一点。 我以为有一种想法是以某种方式将任何滚动视图的任何接触“克隆”到另外两个点上,但我不知道如何去做。 如果有人对此有任何想法,我会非常感激。

编辑:我试着建议子类化UIScrollView和重写touchesMoved调用touchesMoved在其他滚动视图。 不幸的是,touchesMoved并没有被要求进行滚动动作,因为UIScrollView以某种方式截取了这些动作并使用它们来控制它的滚动。 我开始寻找更低级别的东西,并找到核心动画滚动层,但理想情况下,我不想从头开始重新创建UIScrollView。 仍试图找出这一个。


我认为最简单的方法是将代理添加到实现以下方法的滚动视图中:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

然后,您可以检查contentOffset以检查滚动视图实际滚动的次数,并相应地更新主滚动视图。


您需要为屏幕上的所有三种用途扩展UIScrollView,并覆盖touchesMoved:withEvent:方法来调用其他方法(确保不会以循环代码结束再次调用自身!)。

所以,例如双向滚动项目中的代码可以基于这个:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [horizontalScrollview touchesMoved:touches withEvent:event];
    [verticalScrollview touchesMoved:touches withEvent:event];
}

通过使用一些额外的变量(例如ControllerLastTouched ),您可以在调用其他两个touchesMoved:withEvent:方法之前检查该变量。

这应该使你能够做到你在谈论的“克隆”......

链接地址: http://www.djcxy.com/p/44253.html

上一篇: Connect two UIScrollView's together

下一篇: Get the current first responder without using a private API