【问题标题】:iOS : How to do proper paging in UIScrollView?iOS:如何在 UIScrollView 中进行正确的分页?
【发布时间】:2012-09-26 06:22:55
【问题描述】:

我有一个大小为 (320,160) 的 UIScrollView。我在其中添加了一些 UIImageView,它们的大小为 (213,160)。第一个 UImageView 从 54 (x) 开始,依此类推,我在每个 UIImageView 之间添加了一个 5.0 的空格。我还在IBcoding 中启用了pagingEnable。我的问题是它不能按照它的属性正常工作!当我滚动时,它应该在每个page 中显示UIImageViews,而不是显示类似see screenshot 的内容我想输出类似see output screenshot 的内容

我哪里做错了?我还有<(上一个)和>(下一个)的功能来显示图像。我昨天问了一个问题,我接受了,但是我的要求几乎没有变化,它不会成为我的解决方案。 see my question.

我需要设置什么特殊属性,或者我应该实现一些逻辑吗?我检查并尝试过的所有示例,但我发现我的要求有些特殊。指点我!谢谢。

已编辑:

- (void) setImages
{
CGFloat contentOffset = 0.0f;

    for (int i=0; i<[arrImgUrls count]; i++) 
    {
        CGRect imageViewFrame = CGRectMake(contentOffset, 0.0f, 213, scrollImages.frame.size.height);
        AsyncImageView *asyncImageView = [[AsyncImageView alloc] initWithFrame:imageViewFrame];
        [asyncImageView.layer setMasksToBounds:YES];
        NSString *urlImage = [arrImgUrls objectAtIndex:i];
        NSURL *url = [NSURL URLWithString:urlImage];
        [asyncImageView loadImageFromURL:url];
        [scrollImages addSubview:asyncImageView];
    contentOffset += asyncImageView.frame.size.width+increment;
        [asyncImageView release];
}

    scrollImages.contentSize = CGSizeMake([arrImgUrls count] * scrollImages.frame.size.width, scrollImages.frame.size.height);
    scrollImages.pagingEnabled = YES;
    scrollImages.clipsToBounds = NO;
}

-(IBAction)prevImage:(id)sender
{    
     _currentImage--;

     [btnNext setEnabled:YES];

     if (_currentImage==0)
     {
         [btnPrev setEnabled:NO];
         [scrollImages setContentOffset:CGPointMake((_currentImage*imageWidth), 0) animated:YES];
         return;
     }

     NSLog(@"previous:mult %d inc %d current %d",_currentImage*imageWidth,increment*_currentImage,_currentImage);

     int nextImage=_currentImage+2;

     [scrollImages setContentOffset:CGPointMake((((_currentImage*imageWidth)-(increment*_currentImage)))+(nextImage*increment), 0) animated:YES];
 }

-(IBAction)nextImage:(id)sender
{    
   _currentImage++;

   NSLog(@"next:mult %d inc %d current %d",_currentImage*imageWidth,increment*_currentImage,_currentImage);

  [scrollImages setContentOffset:CGPointMake((_currentImage*imageWidth)+(increment*_currentImage), 0) animated:YES];

  [btnPrev setEnabled:YES];

  if (_imageCount-1 == _currentImage)
 {
    [btnNext setEnabled:NO];
 }
}

【问题讨论】:

  • 您的滚动视图根本看不到任何分页(但只是正常滚动),还是您的问题是滚动/分页停止时图像没有显示在中间?
  • 是的@Kai,完全正确。当我滚动图像时,中间不显示。

标签: iphone ios uiscrollview custom-paging scroll-paging


【解决方案1】:

分页滚动视图的页面总是其帧大小的倍数。因此,在您的示例中,分页始终为 +320。

如果您的内容部分与滚动视图的框架匹配,则此行为很好。

你需要做的就是给你的滚动视图一个宽度为 213 并将它的clipsToBounds 属性设置为NO。 之后,您的滚动视图页面将完全按照您的意愿进行,您会看到框架外的左侧和右侧。 此外,您必须做一个技巧来使这个左右区域代表对滚动视图的触摸。

this answer 中有详细解释。

【讨论】:

  • 它正在工作,但删除所有 clipsToBounds 并没有帮助。单元格一旦超出集合视图就会被删除。
【解决方案2】:

您忘记设置滚动视图内容大小。

确保您已将内容大小设置为适合 N 个图像。

如果你想通过滚动视图滚动 10 张图片,每页一张图片 将scrollViewcontentSize设置为

[scrollView setContentSize:CGSizeMake(320 * 10,200)];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多