iPhone SDK:在显示第一个视图控制器之前下载并设置UIImageView

时间:2011-12-06 15:45:52

标签: iphone download uiimageview nsmutablearray

我无法在应用完成加载后立即显示UIImage并显示第一个视图控制器。由于从网上下载图像,因此显示图像有延迟。在applicationDidFnishLaunching之前是否有任何方法被调用,以便可以立即下载和显示图像?

以下是我用来下载图片的代码:
在委托中,此方法在appDidFinishLaunching中调用:

-(void)downloadImages {

    NSString *mainImagesJSON = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"mainImagesJSON.php"]]encoding:NSUTF8StringEncoding error:nil];
    SBJsonParser *parser = [[SBJsonParser alloc]init];

    NSDictionary  dictionary1 = [[parser objectWithString:mainImagesJSON error:nil]mutableCopy];


    mainImagesArray = [[dictionary1 valueForKey:@"imgSrc"]mutableCopy];

    NSString *imagesTablePath = [mainImagesArray objectAtIndex:0];
    NSURL *imgURL = [NSURL URLWithString:imagesTablePath];

    NSData *imageData = [NSData dataWithContentsOfURL:imgURL];
    UIImage *image1 = [UIImage imageWithData:imageData];

    imageStorageArray = [[NSMutableArray alloc]init];

    [imageStorageArray addObject:image1];



}

然后在第一个viewController.m中:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UIImage *image1 = [[delegate imageStorageArray]objectAtIndex:0];
[mainHomeImageView setImage:image1];

2 个答案:

答案 0 :(得分:0)

我看到它的方式,你有两个选择:

1:在第一次运行时将图像缓存在Library/Caches目录中,并通过某种弹出窗口或帮助视图分散用户的注意力。

2:您可以制作一个延长的启动画面视图,只显示应用程序的启动画面,直到文件完成下载,此时您将切换到主视图。

答案 1 :(得分:0)

一般来说,在applicationDidFinishLaunching方法中执行耗时的代码并不是一个好主意,好像启动时间太长,您的应用程序将被终止。

您可以在从网络下载图片时显示占位符图片(来自项目资源),然后在下载后将其替换为正确的图片。

我还建议您查看SDWebImage框架,这是一个用于下载和缓存图像的优秀框架。

  

此库为UIImageVIew提供了一个支持的类别   来自网络的远程图像。

     

它提供:

An UIImageView category adding web image and cache management to the Cocoa Touch framework
An asynchronous image downloader
An asynchronous memory + disk image caching with automatic cache expiration handling
A guarantee that the same URL won't be downloaded several times
A guarantee that bogus URLs won't be retried again and again
Performances!