0118iosapp_获取网络图片文件,并替换视图中的图片流程

项目 urlimage



import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var url_imageVIew: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //URL转换为string
        let image_url = URL(string: "https://jbjt.oss-cn-shanghai.aliyuncs.com/status%2Ffont%2Fimg%2F20180919/banner_01.png")
        //创建 URLRequest(URL:url) 的实例对象
        let request = URLRequest(url: image_url!)
        //创建任务
        let task = URLSession.shared.dataTask(with: request) { (data, responce, error) in
            
            if error != nil {//错误存在为真
                
                print(error!)
                
            }else{//错误不存在
                
                if let imageData = data{
                    //加入主线程
                    DispatchQueue.main.async {
                        //下载的数据赋值给data
                        self.url_imageVIew.image = UIImage(data: imageData)
                        //控制图片视图的填充模式
                        self.url_imageVIew.contentMode = UIView.ContentMode.scaleAspectFit
                    }
                
                    
                }
            }
        
        }
        //执行
        task.resume()

        // Do any additional setup after loading the view, typically from a nib.
    }

    
    @IBAction func change_image_button(_ sender: UIButton) {
        //引用网络图片到程序上的imageView,逻辑是建立URLSession.shared.dataTask()实例化对象,这个对象需要
        //URLSession.shared.dataTask(with: <#T##URLRequest#>, completionHandler: <#T##(Data?, URLResponse?, Error?) -> Void#>)   需要URLRequest,这个要先创建;闭包中就是链接图片引用完成后要执行的动作
//建立参数;1,将URL变成string 使用 URL()类实例化的方法,获取对象
        let url = URL(string: "http://www.runoob.com/wp-content/uploads/2013/11/ios.png")
        
        //2,创建URLReuqest() 类的实例化对象
        let url_request = URLRequest(url: url!)
//把参数带入最终的任务对象
        let task = URLSession.shared.dataTask(with: url_request) { (data, responce, error) in
            //data是文件数据,可以进行操作使用,,responce 网络响应对象信息,内容可以查询,error 错误。
            if error != nil {//错误存在为真
                print(error!)
                
            }else{//错误不存在为真
                print(data!)
                print("==================================")
                print(responce!)
                
                //图片视图操作必须加入主线程
                DispatchQueue.main.async {
                    //执行视图操作,更换视图的图片,注意使用的是UIImage(data:data)模式,这里的data 就是获取的数据对象
                    self.url_imageVIew.image = UIImage(data: data!)
                    //控制图片视图的填充模式
                    self.url_imageVIew.contentMode = UIView.ContentMode.scaleAspectFit
                }
                //若不加入主线程会报错 UIImageView.image must be used from main thread only
            }
            
        }
//执行任务
        task.resume()
        
        
    }
    
    

}

猜你喜欢

转载自blog.csdn.net/whqwjb/article/details/86536088