这是我一直在研究的一个棘手的iPhone问题。我在页面上有三个UIScrollViews,一个只能水平滚动,一个只能垂直滚动,一个可以水平和垂直滚动。我想将视图锁定在一起,以便水平滚动视图的水平位置与主滚动视图的水平位置匹配,同样垂直滚动视图,以便拖动主滚动视图来控制水平和垂直滚动视图。
问题是,我完全被难过了。我在Apple文档中查看过,但似乎没有任何方法可以正式执行此操作。有人认为我曾经以某种方式“克隆”任何滚动视图上的任何触摸到另外两个上的点,但我不知道如何做到这一点。如果有人对此有任何想法,我会非常感激。
编辑:我尝试了子类化UIScrollView的建议,并重写touchesMoved以在其他滚动视图上调用touchesMoved。不幸的是,touchesMoved没有被调用滚动动作,因为UIScrollView以某种方式拦截这些动作并使用它们来控制它的滚动。我开始寻找更多低级别的东西并找到核心动画滚动图层,但理想情况下我不想从头开始重新创建UIScrollView。还在努力想出这个。
答案 0 :(得分:11)
我认为最简单的方法是在您的滚动视图中添加一个委托来实现以下方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
然后你可以检查contentOffset以检查scrollview实际滚动了多少,并相应地更新主滚动视图。
答案 1 :(得分:-1)
你需要在屏幕上扩展UIScrollView用于所有三种用途,并覆盖touchesMoved:withEvent:方法来调用其他用途(确保你最终没有最终调用自身的循环代码!)。 / p>
因此,例如双向滚动项中的代码可以基于此:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[horizontalScrollview touchesMoved:touches withEvent:event];
[verticalScrollview touchesMoved:touches withEvent:event];
}
通过使用一些额外的变量(例如ControllerLastTouched
),你可以在调用另外两个touchesMoved:withEvent:methods之前检查它。
这可以让你做你正在谈论的“克隆”...