• 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 =@"图片下载完成";

     

        }

  • 相关阅读:
    fedora 24 使用扇贝网页版没有声音
    Fedora 23安装 NS2 (network simulator 2)
    如何扩大LVM 逻辑分区的大小?
    code::blocks编译出错
    Fedora 23 忘记root密码
    u盘安装Fedora23
    Derived 派生类
    移动点的坐标
    进栈 出栈
    C和C++语言&
  • 原文地址:https://www.cnblogs.com/llios/p/3922102.html
Copyright © 2020-2023  润新知