0

我是 iPhone 编程的新手。

使用下面的代码,我可以从服务器下载和显示所有图像。但是在服务器中,我有超过 1000 张图像。所以使用下面的代码我可以下载并在滚动视图中显示为 3*3 缩略图。

但我想要的意味着首先我必须下载并在滚动视图中显示 15 张图像作为 3*3 缩略图。

如果我向下滚动意味着我必须显示活动指示器然后下载下一个表格 16 到 30 个图像,同样如果我滚动意味着我想下载并在缩略图中显示 31 到 45 个图像。

我不想从服务器下载所有图像。

任何人都可以告诉我我该怎么做。

- (void)viewDidLoad
{
    URLs = [[NSMutableArray alloc]init];

    for (NSString *path in latestiamge)
    {
        NSURL *URL = [NSURL URLWithString:path];

        if (URL)
        {
            [URLs addObject:URL];
        }
        else
        {
            NSLog(@"'%@' is not a valid URL", path);
        }
    }

    self.imageURLs = URLs;

    myScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0.0, 84.0, 320.0, 840.0)];
    myScrollView.delegate = self;
    myScrollView.contentSize = CGSizeMake(320.0, 840.0);
    myScrollView.backgroundColor = [UIColor whiteColor];

    [self.view addSubview:myScrollView];

    float horizontal = 2.0;
    float vertical = 2.0;

    for(int i=0; i<[imageURLs count]; i++)
    {
        if((i%3) == 0 && i!=0)
        {
            horizontal = 5.0;
            vertical = vertical + 100.0 + 5.0;
        }

        CGRect frame;
        frame.size.width=100.0;
        frame.size.height=100.0;
        frame.origin.x=0;
        frame.origin.y=0;

        AsyncImageView *imageView = [[AsyncImageView alloc] initWithFrame:frame];
        imageView.contentMode = UIViewContentModeScaleAspectFill;
        imageView.clipsToBounds = YES;
        imageView.tag = i;
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
                                             initWithTarget:self
                                             action:@selector(actionHandleTapOnImageView:)];

        imageView.userInteractionEnabled = YES;
        [imageView addGestureRecognizer:singleTap];

        [myScrollView addSubview:imageView];
        [myScrollView addSubview:imageView];

        horizontal = horizontal + 100.0 + 5.0;
    }

    [myScrollView setContentSize:CGSizeMake(320.0, vertical + 3900.0)];

    [super viewDidLoad];
}
4

3 回答 3

1

好吧,有一个很好的基础类,您可以使用它来异步下载和显示图像。

SDWebImage

于 2013-06-19T06:55:45.223 回答
0

像现在这样自己做所有事情比需要的努力更多,而且不利于内存管理。考虑使用表格或集合视图来管理滚动,这样您就不会同时加载太多视图,因此您不需要为所有内容的完整布局编写代码。

您已经在使用AsyncImageView,如果您将它们中的一些添加到要显示的单元格中并按照委托/数据源方法的要求配置它们,它将起作用。

您还应该考虑充当滚动视图委托并监视滚动完成。如果用户滚动到当前底部,您可以添加一个带有活动指示器的页脚视图,从服务器开始加载下一页,然后重新加载视图并在下载新页面时删除页脚。

于 2013-06-19T07:00:48.327 回答
0

根据我从您的问题中了解到的情况,您想要创建一个连续包含三张图像的图像网格。但是你的方法是错误的......!

不要使用 scrollView 而是使用 UITableView。如果您的目标是 iOS 6.0 或更高版本,我认为您可以使用UICollectionView 。

这是您需要做的:

  • 创建自定义 UITableViewCell ,其中包含您需要的连续图像数量。您也可以通过在创建单元格时传递所需的网格项数量并在单元格中创建这些视图并将这些视图定位为子视图来使此动态化。
  • 重复使用表格中的单元格来填充网格。
  • 您可以缓存图像以获得更好的性能,我建议您使用SDWebImage
  • cellForRowAtIndexPath您可以配置所有的gridItems。

您需要更多帮助吗...??

于 2013-06-19T07:02:06.243 回答