我有两个水平滚动的UIScrollViews在一个ViewController中垂直堆叠在一起。每个UIScrollView占用屏幕的一半。我试图独立跟踪两个UIScrollViews的位置。
我已成功使用它来跟踪顶部UIScrollView的位置:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView1 {
int Position = (scrollView1.contentOffset.x);
if (Position == 0) {
NSLog(@"Play A");
}
else if (Position == 280) {
NSLog(@"Play B");
}
//etc.
}
我想跟踪底部UIScrollView的位置。
当我尝试使用它时:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView2 {
int Position2 = (scrollView2.contentOffset.x);
if (Position2 == 0) {
NSLog(@"Play A2");
}
else if (Position == 280) {
NSLog(@"Play B2");
}
//etc.
}
我收到一条错误,上面写着“重新定义FirstViewConroller scrollViewDidScroll”。
所以,决定按下,我尝试了一个相当hackish的解决方案并尝试使用它:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView2
{
int Position2 = (scrollView2.contentOffset.x);
if (Position2 == 0) {
NSLog(@"Play A2");
}
else if (Position2 == 280) {
NSLog(@"Play B2");
}
//etc.
}
这个问题是当我移动任何一个UIScrollViews时它会触发两个方法。例如 - 如果我将底部UIScrollView 280像素(一个图像)向右移动,我在控制台中获得的输出是:
更多播放
PlayB2
如果我向右移动顶部UIScrollView三个图像,我得到的输出是:
PlayC
PlayC2
这对我没有任何意义。
我想我可能会反对我对代表工作方式的不完全理解。在viewDidLoad方法中,我设置了两个:
scrollView1.delegate = self;
scrollView2.delegate = self;
也许这是问题的一部分?也许我通过声明两个scrollViews具有相同的委托来引起麻烦?只是不确定。
我也尝试将所有条件语句组合到一个方法中 - 但我只想跟踪底部UIScrollView移动时的位置以及顶部UIScrollView移动时的位置,并将逻辑全部放入在一种方法中报告两个位置,当任何一个移动时,这不是我正在寻找的。 p>
感谢任何帮助。很想解决这个特殊的问题,但也非常想了解我接近这个问题的任何更大的问题。还是新的。一直在想我已经掌握了它,然后我遇到了一些让我陷入困境的东西..
答案 0 :(得分:14)
这正是UIScrollView
参数的用途。在IB中创建与scrollView1和scrollView2的连接,然后执行以下操作:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView1 == scrollView) {
// Do stuff with scrollView1
} else if (scrollView2 == scrollView) {
// Do stuff with scrollView2
}
}
答案 1 :(得分:0)
没有理由为什么同一个对象不能成为几个不同的滚动视图的委托。 -scrollViewDidScroll:向您传递相关的scrollview的原因是,您知道哪个 scrollview确实滚动了。
这是委托消息的一般模式。