UIScrollView - showsHorizontalScrollIndicator 是如何计算的?
Posted
技术标签:
【中文标题】UIScrollView - showsHorizontalScrollIndicator 是如何计算的?【英文标题】:UIScrollView - how is showsHorizontalScrollIndicator calculated? 【发布时间】:2010-11-22 18:07:15 【问题描述】:如果启用showsHorizontalScrollIndicator
,UIScrollView 底部会显示一个小的水平指示器。我想知道是否有人可以告诉我这是如何计算的。原因是,如果有内容左/右,我想在水平导航系统中显示自定义指示器,当内容可用时显示/隐藏。
【问题讨论】:
【参考方案1】:我只使用scrollView.contentOffset.x
。如果你想知道你在哪一页,你除以你的页面宽度(假设你有一个标准宽度)。所以
int currentPage=(int)scrollView.contentOffset.x/SCREEN_WIDTH;
例如。现在如果你想显示一个位置指示器,比如在 ios 主页中,你可以在
-(void)scrollViewDidScroll:(UIScrollView *)sender
类似
currentPage=(int)scrollView.contentOffset.x/SCREEN_WIDTH;
for(int i=0; i<pageCount; i++)
if(i==currentPage)//display a filled in 'o'
else //display an empty 'o'
哦,顺便说一句,-(void)scrollViewDidScroll:(UIScrollView *)sender
在最初加载 UIScrollView
时不会被调用,所以您或许应该自己调用它(以便在用户滚动之前显示指示器)。当然,您也可以使用scrollView.contentOffset.y
,因此您可以轻松地调整它以显示“o”的“+”形排列,同时暗示上方和下方的内容。
【讨论】:
在 Oh Danny Boy 的代码中,我不明白他为什么要使用 performSelector:withObject:afterDelay——尤其是当他的延迟为 0 时。当然更好的是 [self scrollViewReachedRightBound];等 你是绝对正确的。我一直在玩延迟值递减直到我达到 0。我编辑了我的帖子以反映变化。感谢您指出这一点并花时间回答。 谢谢“哦,丹尼男孩”。我还认为您可能会丢失 'scrollViewReachedLeftBound' 和 'scrollViewReachedRightBound' 方法并用它们的 2 行代码替换它们。我一直在研究我的 iOS 之类的位置指示器。【参考方案2】:我使用了以下解决方案。不是最漂亮的,但它似乎工作。需要UIScrollViewDelegate
。
-(void)scrollViewDidScroll:(UIScrollView *)sender
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self scrollViewDidEndScrollingAnimation:subNavigation];
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
[NSObject cancelPreviousPerformRequestsWithTarget:self];
if (scrollView.contentOffset.x <= 0)
[self scrollViewReachedLeftBound];
else if (scrollView.contentOffset.x >= 300)
[self scrollViewReachedRightBound];
else
[leftArrow setHidden:NO];
[rightArrow setHidden:NO];
- (void)scrollViewReachedLeftBound
[leftArrow setHidden:YES];
[rightArrow setHidden:NO];
- (void)scrollViewReachedRightBound
[leftArrow setHidden:NO];
[rightArrow setHidden:YES];
【讨论】:
以上是关于UIScrollView - showsHorizontalScrollIndicator 是如何计算的?的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView里面的UIScrollView:滚动
问题:UIScrollview 弹跳使父 UIScrollview 弹跳
UIScrollView 嵌入其他 UIScrollView