0

我需要向 UIScrollview 添加多个按钮(它取决于数组计数)。现在我正在使用以下代码。此代码工作正常,但此功能需要更多时间(添加按钮的延迟)。请帮助我..

   for (int i=0; i< [imageArray count]; i++) {
    NSURL *url = [NSURL URLWithString:[[imgArray objectAtIndex:i]objectForKey:@"url"]];
    UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
    button1.frame = CGRectMake(xp, 0, 75, 75);
    [button1 setImage:img forState:UIControlStateNormal];
    [button1 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    button1.layer.borderColor = [UIColor whiteColor].CGColor;
    button1.layer.borderWidth = 2.0;
    [mScrollView addSubview:button1];
    xp += button1.frame.size.width+15;
}
4

3 回答 3

1

因为您正在从服务器加载图像,所以它会阻塞您的主线程,直到图像完全加载。尝试在不同的线程中加载图像

下面是一个示例,显示如何在不同的线程上加载图像

将您的按钮对象和 url 添加到一个数组中(这可以写在您的 for 循环中)

 NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0];
[array addObject:cell.businessLogoImageView];
[array addObject:@"your Url"];
[NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:array];
[array release];
array = nil;

现在实现 loadImage

-(void)loadImage:(NSArray *)objectArray
 {
    UIImageView *tempImageView = (UIImageView *)[objectArray objectAtIndex:0];
    tempImageView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[objectArray objectAtIndex:1]]]];

 }
于 2013-08-28T11:18:31.630 回答
0

从 GitHub 获取 SDWebImage。其中有一个名为 UIButton+WebCache 的类别,它可以异步加载按钮的图像,并将它们存储在磁盘和内存中以加快它们随后的重新加载。

#import "UIButton+WebCache"

....
UIButton *button...
[button setImageWithURL:[NSURL urlWithString:@"www.etc.com/img.jpg"] forControlState:UIControlStateNormal];
于 2013-08-31T11:12:13.087 回答
0

对于现成的项目,您可以使用以下链接。当您从服务器加载图像时,它还应该对图像进行缓存,以免一次又一次地下载图像,所以,应该有类似延迟加载的东西(这不能通过在后台运行来解决)

延迟加载滚动视图

于 2013-08-28T11:31:08.380 回答