UIScrollView - showsHorizo​​ntalScrollIndicator 是如何计算的?

Posted

技术标签:

【中文标题】UIScrollView - showsHorizo​​ntalScrollIndicator 是如何计算的?【英文标题】: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 - showsHorizo​​ntalScrollIndicator 是如何计算的?的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView里面的UIScrollView:滚动

问题:UIScrollview 弹跳使父 UIScrollview 弹跳

UIScrollView 嵌入其他 UIScrollView

分页 UIScrollView 内的 UIScrollView

UIScrollView

UIscrollView