UIButton冻结了

时间:2011-05-19 09:21:24

标签: iphone uiimageview uiimage

我有两个视图控制器。在第一个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;

请有人建议我解决这个问题。

谢谢

3 个答案:

答案 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];

谢谢和问候