从UIButtons上的服务器加载多个图像?

时间:2011-08-09 06:54:46

标签: iphone ios uibutton

我正在尝试在UIButton上传8-10个缩略图。图像直接通过链接加载到我的服务器,例如。 www.abc.com/fire.png。我把这些UIButton放在了Scrollview中。以下代码是我如何实现它。但每当调用此方法时,我的应用程序就会挂起,因为我猜这些图像需要花时间加载按钮。如何阻止我的应用程序卡住几秒钟?

- (void)loadSCRView
{
[self.view addSubview:scrollView];

for (i = 0; i < [myEngine.logoUrlArr count]; i++)
{
    NSString *imageName = [NSString stringWithFormat:@"%@",[myEngine.logoUrlArr objectAtIndex:i]];
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL: [NSURL URLWithString:imageName] options:NSDataReadingUncached error:nil]];

    UIButton *btn = [[UIButton alloc]init];
    [btn setImage:image forState:UIControlStateNormal];

    [btn setFrame:CGRectMake(x, 4, 57, 57)];
    x=x+ 70.00;

    btn.tag = i;

    [scrollView addSubview:btn];
    [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchDown];

    UILabel *label = [[UILabel alloc]init];
    label.text = [myEngine.nameArr objectAtIndex:i];
    [label setFont:[UIFont fontWithName:@"Helvetica" size:12]];
    [label setTextColor:[UIColor whiteColor]];
    [label setBackgroundColor:[UIColor clearColor]];
    [label setFrame:CGRectMake(btn.frame.origin.x , 59, 70, 20)];
    //[label setFrame:CGRectMake(100 , 59, 70, 20)];
    y=y+ 100.00;
    [scrollView addSubview:label];
    [btn release];
    [label release];
}

3 个答案:

答案 0 :(得分:2)

在显示滚动视图之前,您应该尝试获取这些图像(最好是在后台线程中)。将它们保存在磁盘上在滚动视图中使用它们。网络操作通常不会那么快,你没有观察到延迟。

HTH,

Akshay

答案 1 :(得分:0)

为避免冻结,您必须使用NSOperationQueue。 Here是一个很好的例子......

答案 2 :(得分:0)

您可以使用线程,以便在后台线程&amp;中下载图像。缓存它。所以下次你的表现会很好。