Swift - UIScrollView跳转到第一页而不是滚动到它

时间:2015-07-07 12:32:50

标签: ios swift uiscrollview

有没有办法将圆圈滚动添加到UIScrollView? 例如,如果滚动到达最后一页,则第一页应该是下一页,如果滚动到达第一页,则最后一页应该是下一页。

我一直在尝试使用scrollViewDidScroll函数,但是当滚动到达最后一页时,视图会跳回到第一个视图,而不是滚动到它或将其添加到它旁边。

我的代码是:

func scrollViewDidScroll(scrollView: UIScrollView) {

        if (scrollView.contentOffset.x > scrollView.frame.size.width){
            scrollView.setContentOffset(CGPointZero, animated: true)
            //scrollView.scrollRectToVisible(CGRectMake(0, 0, 1, 1), animated: false)


        }

        if (scrollView.contentOffset.x < 0){
            scrollView.setContentOffset(CGPointMake(scrollView.frame.size.width,0.0), animated: true)
        }
    } 

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:1)

你将不得不在后面做一小部分工作,但这并不是太艰难。

看似在最后一页显示内容的第一页不是滚动视图本身可以做的事情。要解决此问题,您需要将contentSize扩展到右侧的额外屏幕并复制您的内容。

这将使你的内容区域覆盖[0,最后一页的结尾]到[0,最后一页的结尾+ 1)。但是你仍然希望滚动被约束到[0,最后一页],并且[-1,0]范围内的偏移被映射到[最后一页,最后一页+ 1]。所以:

func scrollViewDidScroll(scrollView: UIScrollView) {

    let realContentWidth = scrollView.contentSize.width - scrollView.bounds.size.width

    scrollView.contentOffset.x = ((scrollView.contentOffset.x % realContentWidth) 
                                                    + realContentWidth) % realContentWidth;
} 

该模数的逻辑是:

  • 如果你从内容偏移开始是一个正数,那么内部%将把它映射到正确的范围,外部将导致+为无操作;但
  • 如果你开始将内容偏移量设为负数,那么内部%将保持负值但是在(-realContentWidth,0)中,所以+然后将把它移动到相应的正范围内,外部%为a无操作。

(快速观察Objective-C'ers:%是在Swift中的浮点数上定义的;在Objective-C中,你使用fmod作为% }仅为整数算术定义)