zoukankan      html  css  js  c++  java
  • IOS UI多线程 NSThread 下载并显示图片到UIImageView

    效果图

    @property (weak,nonatomic)IBOutletUILabel *downLabelInfo;

    @property (weak,nonatomic)IBOutletUIImageView *imageView;

     

    @end

     

    @implementationViewController

     

    - (void)viewDidLoad

    {

        [super viewDidLoad];

       

        NSString *url  =@"http://d.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=6cbcab9dabec8a13141a53e3c135aaec/aa64034f78f0f7369453c3730855b319ebc41316.jpg";

       

        @autoreleasepool {

            NSThread *thread = [[NSThreadalloc]initWithTarget:selfselector:@selector(downloadImage:)object:url];

            [thread start];

        }

     

    }

     

    - (void)didReceiveMemoryWarning

    {

        [super didReceiveMemoryWarning];

     

    }

     

    -(void) downloadImage:(NSString *)url {

      

        // 要把显示的内容放到同步方法前面即可

        self->_downLabelInfo.text =@"正在下载图片中...";

       

        // 同步方法 会卡线程直到完成位置

       

        NSData *imageData = [NSDatadataWithContentsOfURL:[NSURLURLWithString:url]];

       

        UIImage *image =[UIImageimageWithData:imageData];

     

        if(image==nil)

        {

        }

        else

        {

            //self->_downLabelInfo.text = @"正在下载图片中...";所以这条语句写了也没用

            [self performSelectorOnMainThread:@selector(updateImageView:)withObject:(image)waitUntilDone:YES];

        }

    }

     

    -(void) updateImageView:(UIImage *)image

    {

        self->_imageView.image = image;

     

        self->_imageView.frame=CGRectMake(self.view.frame.size.width/2-100,self.view.frame.size.height/2-100,200, 200);

        self->_downLabelInfo.textColor = [UIColorredColor];

        self->_downLabelInfo.text =@"图片下载完成";

    }

    @end

    第二种方式使用 NSURLConnection  sendSynchronousRequest 同步方式获取图片内容并显示

    将downloadImage方法修改如下

    -(void) downloadImage:(NSString *)url

    {

          self->_downLabelInfo.text =@"正在下载图片中...";

        NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:url]];

        NSError *error;

       // 此处将会造成阻塞

        NSData *data   = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:&error];

     

        if(data ==nil)

        {

            NSLog(@"nil");

     

        }

        else

        {

            UIImage *image =[UIImageimageWithData:data];

           

            self->_imageView.image = image;

            self->_downLabelInfo.textColor = [UIColorredColor];

            self->_downLabelInfo.text =@"图片下载完成";

     

        }

  • 相关阅读:
    bzoj 1103
    [POI] 大都市meg
    [Luogu] 网络
    [Luogu] 1600
    [Luogu] 树状数组
    [Luogu] 软件包管理器
    [Luogu] 遥远的国度
    [USACO5.5] 矩形周长Picture
    [Luogu] 魔板
    【NOIP2015】斗地主
  • 原文地址:https://www.cnblogs.com/llios/p/3922102.html
Copyright © 2011-2022 走看看