检测UIScrollView位置

Ger*_*acs 8 objective-c uiscrollview ios contentoffset

我试图在我的iOS应用程序中使用UIScrollView作为导航设备.基本上,我希望应用程序根据启用分页的UIScrollView的位置加载特定内容.它有点像导航轮.

目前,我有一个两页(2*320)的scrollview,我正在使用scrollViewDidEndDragging委托方法并contentoffset.x加载适当的内容.我试着确定scrollview的位置:

if (scrollView.contentOffset.x < 320) {
   // Load content 1
    }
else if (scrollView.contentOffset.x >= 320) {
   // Load content 2
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是我要么不理解如何使用contentoffset,要么不适合处理我的问题.无论哪种方式,我都被困住了.有人能告诉我出错的地方和/或向我展示确定滚动视图位置的更有效方法吗?

我很傻,我忘了提问题是什么......基本上,我无法跟踪scrollview的位置.当我移动到第二页时,如果我超过620限制(向右反弹),它只会记录更改.但是当我回到起始位置(第1页)时,它会注册更改.换句话说,我的跟踪不准确.

代表和其他一切工作正常,我记录下来!

Mic*_*lum 16

很难说,因为你从来没有特别提到问题是什么,但我会对它做一些猜测.

如果没有调用委托方法,则需要记住设置滚动视图委托:

[myScrollView setDelegate:self];

否则,使用scrollViewDidEndDragging检测滚动视图偏移的问题是它将检查停止拖动的位置处的偏移量,该位置可能在目标页面rect内,或者在起始页面rect内.作为替代方案,我建议您使用scrollViewDidEndDecelerating检查内容偏移量,因为一旦滚动视图在其目标页面停止,它就会被调用.

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.x < 320) {
        NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
    }
    else if (scrollView.contentOffset.x >= 320) {
        NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
    }
}
Run Code Online (Sandbox Code Playgroud)


fil*_*lou 7

我想这可以帮到你:).随着scrollViewDidScroll你总是让你的滚动视图的确切位置:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x < 320)
    {
         // Load content 1
    }
    else if (scrollView.contentOffset.x >= 320)
    {
         // Load content 2
    }
}
Run Code Online (Sandbox Code Playgroud)

NSLog(@"Position: %g", scrollView.contentOffset.x);

不要忘记UIScrollViewDelegate.h文件中的委托.