将scrollViewDidScroll与多个UIScrollViews一起使用

crg*_*rgt 3 xcode cocoa cocoa-touch uiscrollview

我有两个水平滚动的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.
}
Run Code Online (Sandbox Code Playgroud)

我想跟踪底部UIScrollView的位置.

当我尝试使用它时:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView2 {

int Position2 = (scrollView2.contentOffset.x);

if (Position2 == 0) {
NSLog(@"Play A2"); 
}

else if (Position == 280) {
NSLog(@"Play B2"); 
}

//etc.
}
Run Code Online (Sandbox Code Playgroud)

我收到一条错误,上面写着"重新定义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.
}
Run Code Online (Sandbox Code Playgroud)

这个问题是当我移动任何一个UIScrollViews时它会触发这两个方法.例如 - 如果我将底部UIScrollView 280像素(一个图像)向右移动,我在控制台中获得的输出是:

PlayB
PlayB2

如果我向右移动顶部UIScrollView三个图像,我得到的输出是:

PlayC
PlayC2

这对我没有任何意义.

我想我可能会碰到我对代表工作方式的不完全理解.在viewDidLoad方法中,我设置了两个:

scrollView1.delegate = self;
scrollView2.delegate = self;
Run Code Online (Sandbox Code Playgroud)

也许这是问题的一部分?也许我通过声明两个scrollViews具有相同的委托来引起麻烦?只是不确定.

我也尝试了所有我的条件语句组合成一个方法 - 但我只希望跟踪底部的UIScrollView的位置在移动时,它移动时,顶部的UIScrollView的位置,并把逻辑都在同一个方法报告两个位置,当任何一个移动,这不是我正在寻找的.

任何帮助表示赞赏.很想解决这个特殊的问题,但也非常想了解我接近这个问题的任何更大的问题.还是新的.一直在想我已经掌握了它,然后我遇到了一些让我陷入困境的东西......

kpe*_*yua 14

这正是UIScrollView参数的用途.在IB中创建与scrollView1和scrollView2的连接,然后执行以下操作:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (scrollView1 == scrollView) {
        // Do stuff with scrollView1
    } else if (scrollView2 == scrollView) {
        // Do stuff with scrollView2
    }
}
Run Code Online (Sandbox Code Playgroud)