我无法在应用完成加载后立即显示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];
答案 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!