检测UIScrollView位置

时间:2012-12-23 16:07:23

标签: objective-c ios uiscrollview contentoffset

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

目前,我有一个两页(2 * 320)的滚动视图,我使用scrollViewDidEndDragging委托方法和contentoffset.x来加载相应的内容。我试着确定scrollview的位置:

if (scrollView.contentOffset.x < 320) {
   // Load content 1
    }
else if (scrollView.contentOffset.x >= 320) {
   // Load content 2
    }

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

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

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

5 个答案:

答案 0 :(得分: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));
    }
}

答案 1 :(得分:7)

我认为这可以帮到你:)。使用scrollViewDidScroll,您始终可以获得scrollView的确切位置:

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

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

不要忘记.h文件中的代理UIScrollViewDelegate

答案 2 :(得分:4)

这是一个将当前位置(页面)设为整数值的解决方案: 使用scrollViewDidEndDecelerating:methode:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"%i", (int)(_scrollView.contentOffset.x / _scrollView.frame.size.width));
}

答案 3 :(得分:1)

如果出于任何原因,您希望在视图结束减速之前收到通知;例如执行动画。您还可以使用以下方法:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    // Where the scroll will end (vertically)
    let offSetY = targetContentOffset.pointee.y

    // I've got a scroll view with paging enabled so I use this to check which "page" is selected.
    if offSetY == firstPageView.frame.origin.y {
        // Do something…
    } else if offSetY == secondPageView.frame.origin.y {
        // Do something…
    }
}

答案 4 :(得分:0)

使用UIScrollViewDelegate,

/classes/ImageManager.php