我有两个视图控制器。在第一个UIViewController中我有一个按钮,当点击它将带你到第二个视图控制器,其中显示两个图像。图像来自URL,所以我使用NSData并初始化UIImage ,并将其分配给UIImageView。
现在问题是当我在第一个视图控制器中单击UIButton时,按钮保持按下状态几秒钟,然后它移动到第二个视图控制器以显示图像。
UIImage *Image1=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:URL_STRING]]];
imageView1.contentMode=UIViewContentModeScaleAspectFit;
imageView1.image=Image1;
UIImage *Image2=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:URL_STRING]]];
imageView2.contentMode=UIViewContentModeScaleAspectFit;
imageView2.image=agent_logo_image;
请有人建议我解决这个问题。
谢谢
答案 0 :(得分:0)
您的问题是您正在进行同步请求以获取图像。这意味着您的主线程正在等待图像下载,然后继续其余的流程。因此,“冻结”按钮只是表明主线程中发生了某些事情,而这个“某些东西”需要先完成。 解决方案是进行异步调用以获取图像。我建议使用ASIHTTPRequest来表示这种东西,因为它相对容易使用,并且可以节省大量的工作。如果您不想使用库,则需要查看NSURLConnection类参考中的“Loading Data Asynchronously”。
答案 1 :(得分:0)
基本上触摸按钮..您正在连接到URL以获取图像。
主线程上的此过程会将UI挂起几秒钟。
我建议你把图像抓取部分放在:
self performSelectorInBackground:@selector() withObject:
功能。
然后在抓取你的图像使用后:
self performSelectorOnMainThread:@selector() withObject: waitUntilDone:
切换回你的主线程并显示你的图像。
希望它有所帮助...... :)
答案 2 :(得分:0)
根据您的问题,图像数据来自互联网,因此需要一些时间才能将数据从互联网上提取并显示在imageview上,因此在这种情况下,我建议您使用的是这种事情的线索是我根据你的问题使用的代码,这应该是完美的
-(void)getImages { NSString *firstImageURL = @"http://fc00.deviantart.net/fs33/i/2008/293/8/6/Wood_Apple_Wallpaper_by_diegocadorin.jpg"; NSString *secondImageURL = @"http://i1-mac.softpedia-static.com/screenshots/Byte-Apple-Wallpaper_3.png"; NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc]init]; NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:firstImageURL]]; NSData *data2 = [NSData dataWithContentsOfURL:[NSURL URLWithString:secondImageURL]]; UIImage * img = [[UIImage alloc]initWithData:data]; UIImage *_img = [[UIImage alloc]initWithData:data2]; img1.image = img ; img2.image = _img; [img release]; [_img release]; [threadPool drain]; }
这里img1和img2是UIImageVIew类的对象
并进入init方法使用NSThread类
调用此函数[NSThread detachNewThreadSelector:@selector(getImages) toTarget:self withObject:nil];
谢谢和问候