iOS:UIScrollView分页无法正常工作

时间:2012-10-04 07:29:03

标签: iphone uiscrollview scroll-paging

我将AsyncImageView添加到UIScrollView以从网络加载图片,其工作正常,我添加了8张图片。问题属于paging我已启用pagingEnableYES,但它不会按我的意愿发送,我正在尝试将contentOffset设置为x center 1}}但它不会有任何影响。我希望当我滚动或选择UIScrollViewnext选项时,每个图片都应该在previous的{​​{1}}内。

这是我将图片添加到UIScrollView

的代码
  

arrImgUrls是一个NSArray

     

_currentImage,_imageCount是整数

-(void)setImagesToScrollView
{
    [btnPrev setEnabled:NO];

    _currentImage = 0;

    _imageCount = [arrImgUrls count];

    int x=20;
    int y=0;
    int w=213;
    int h=160;

    for (int i=0; i<[arrImgUrls count]; i++) 
    {
        AsyncImageView *asyncImageView = [[AsyncImageView alloc] initWithFrame:CGRectMake(x, y, w, h)];
        [asyncImageView setDelegate:self];
        [asyncImageView.layer setMasksToBounds:YES];        
        NSString *urlImage = [arrImgUrls objectAtIndex:i];
        NSURL *url = [NSURL URLWithString:urlImage];
        [asyncImageView loadImageFromURL:url];
        [asyncImageView release];
        [scrollImages addSubview:asyncImageView];
        x=(x+w)+10;
    }

    scrollImages.contentSize=CGSizeMake(x, scrollImages.frame.size.height);
}

这是我用来在previous中展示nextUIScrollView张图片的代码。

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

    [btnNext setEnabled:YES];

    if (_currentImage<=0)
    {
        _currentImage = 0;
        [btnPrev setEnabled:NO];
    }

    [scrollImages setContentOffset:CGPointMake((_currentImage*imageWidth)+10, 0) animated:NO];
}

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

    [btnPrev setEnabled:YES];

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

    [scrollImages setContentOffset:CGPointMake(_currentImage*imageWidth, 0) animated:NO];
}

加载并添加到UIScrollView唯一问题的所有图片都是在用户centerscrollsprevious时在next显示。

请指出我在哪里做错了?

谢谢!

2 个答案:

答案 0 :(得分:3)

首先确保_currentImage是否正确维护?

现在尝试关注下一张图片

CGRect frame;
frame.origin.x = (imageWidth * _currentImage) +10;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES]; // NO if you don't want animation

而不是这一行

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

&安培;对于上一张图片

CGRect frame;
frame.origin.x = (imageWidth * _currentImage) - 10;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES]; // NO if you don't want animation

这里有一个很好的例子就像你想要的那样

Image gallary

答案 1 :(得分:0)

问题在于您为AsyncImageView设置的框架。您必须熟悉分页的工作原理。它检查你已经分配到scrollview&amp;的rect。它滚动到滚动视图的中心,因此您可能会看到图像朝左侧或右侧放置而不是对齐中心。尝试将帧AsyncImageView设置为x = 0&amp; width = 320&amp;看看scrollview的行为。