9

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

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

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

我的问题是我要么不了解如何使用 contentoffset,要么不适合处理我的问题。无论哪种方式,我都被困住了。有人可以让我知道我哪里出错了和/或告诉我一个更有效的方法来确定滚动视图的位置吗?

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

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

4

5 回答 5

18

很难说,因为你从来没有具体提到问题是什么,但我会猜测一下。

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

[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));
    }
}
于 2012-12-23T17:08:58.840 回答
8

我认为这可以帮助你:)。随着scrollViewDidScroll你总是得到你的滚动视图的确切位置:

- (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);

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

于 2012-12-23T17:10:13.183 回答
4

这是获取当前位置(页面)为整数值的解决方案:使用 scrollViewDidEndDecelerating: 方法:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"%i", (int)(_scrollView.contentOffset.x / _scrollView.frame.size.width));
}
于 2014-09-22T22:17:21.177 回答
1

If for any reason, you'd like to be notified before the view ended decelerating; for example, to perform animations. You can also use this:

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…
    }
}
于 2020-04-25T08:04:55.793 回答
0

使用 UIScrollViewDelegate,

 func scrollViewWillBeginDragging(scrollView: UIScrollView){
        print("dragging begins")
        print("Position:  \(scrollView.contentOffset.x) , \(scrollView.contentOffset.y) ")
    }
于 2016-05-30T07:48:20.120 回答