[英]Swift - UIScrollView Jumps to first page instead scrolling to it
有没有一种方法可以将圆形滚动添加到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)
}
}
任何想法如何做到这一点?
您将需要在后勤工作中做少量的工作,但这并不太麻烦。
似乎将内容的第一页显示在最后一页的右侧,这并不是滚动视图本来可以执行的操作。 要解决此问题,您需要在右侧增加一个屏幕来扩展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;
}
该模的逻辑是:
(对Objective-C'ers的快速观察: %
是在Swift中的浮点数上定义的;在Objective-C中,您应该在其位置使用fmod
,因为%
仅在其中为积分算术定义了)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.