我正在尝试在我的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页)时,它会注册更改。换句话说,我的跟踪不准确。
代表和其他一切正常,我记录下来了!
答案 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