【问题标题】:UIPageControl setCurrentPage - UICollectionView iOS6UIPageControl setCurrentPage - UICollectionView iOS6
【发布时间】:2013-03-23 17:59:02
【问题描述】:

我是 XCode 的新手,所以我需要你的帮助。 我使用 UIPageControl 来显示我的集合视图的哪个单元格现在可见。

问题是获取可见单元格:

我认为在这个方法中

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

我应该更新当前页面。但是如何获取当前页面呢?

感谢您的帮助! :-)

【问题讨论】:

    标签: iphone xcode ios6 scrollview pagecontrol


    【解决方案1】:

    页面可以定义为偏移量与大小的比值。

    - (NSInteger)horizontalPageNumber:(UIScrollView *)scrollView {
        CGPoint contentOffset = scrollView.contentOffset;
        CGSize viewSize = scrollView.bounds.size;
    
        NSInteger horizontalPage = MAX(0.0, contentOffset.x / viewSize.width);
    
        // Here's how vertical would work...
        //NSInteger verticalPage = MAX(0.0, contentOffset.y / viewSize.height);
    
        return horizontalPage;
    }
    

    有几种方法可以触发它。您可以在每个scrollViewDidScroll 上完成这项工作,但这有点过分。更好的方法是在拖动完成且不再减速时运行,或者在减速结束时运行,如下:

    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
        self.page.currentPage = [self horizontalPageNumber:scrollView];
    }
    
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
        if (!decelerate) self.page.currentPage = [self horizontalPageNumber:scrollView];
    }
    

    【讨论】:

    • 非常感谢您的回复。当我向前移动时它会起作用,但是当我再次向后移动一个单元格时它不会变回来。我使用了水平页面。我做错了什么?
    • @DanielKappacher,我的错误 - 页面是偏移量与边界的函数。不知道我在想什么,我只写了这个方法大约 100 次。现在修好了。对不起。
    • 感谢您的回答。现在,当我在 NSLog 中给出页面 (horizo​​ntalPage) 时,它总是在我滚动时给我正确的数字。但是 PageControl 只有在我向前滚动时才会改变。我有“ [self.vimpPageControl setCurrentPage:page];”设置当前页面。我忘了什么吗?
    • [self.vimpPageControl setCurrentPage:page];我是否必须将此方法也放在 scrollViewDidEndDeceleating 方法中?谢谢!
    • @DanielKappacher - 几件事...... 1)我将我的答案更新为从零开始(添加一个更好地向用户显示页码作为整数),2)有几种触发方式。也会在我的回答中说明。
    【解决方案2】:

    如果您使用寻呼机,那么代码应该可以帮助您:

    - (IBAction)pagerValueChanged 
    {
        NSData* imgData = [images objectAtIndex:pager.currentPage];
        UIImage* img = [[UIImage alloc]initWithData:imgData];
        imageView.image = img;
    
        //NSLog(@"img width: %f, img height: %f", img.size.width, img.size.height);
    
        [img release];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多