代码之家  ›  专栏  ›  技术社区  ›  Oh Danny Boy

如何计算showshontalscrollindicator?

  •  1
  • Oh Danny Boy  · 技术社区  · 14 年前

    如果 showsHorizontalScrollIndicator 启用后,UIScrollView底部会显示一个小的水平指示器。我想知道是否有人能告诉我这是怎么计算的。原因是,我想在水平导航系统中显示一个自定义指示器(如果有左/右内容),在内容可用时显示/隐藏。

    2 回复  |  直到 14 年前
        1
  •  1
  •   iPadDeveloper2011    14 年前

    我只是用 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*)发件人 UIScrollView 最初是加载的,因此您可能应该自己调用它(以便在用户滚动之前显示指示器)。你也可以使用 scrollView.contentOffset.y 当然,这样你可以很容易地调整它来显示一个“o”的“+”形排列,同时暗示上面和下面的内容。

        2
  •  0
  •   Oh Danny Boy    14 年前

    我用了下面的方法。不是最漂亮的,但似乎有用。要求 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];
    }