12.

多线程加载网络图片

let url = URL(string: "http://c.hiphotos.baidu.com/zhidao/pic/item/5ab5c9ea15ce36d3c704f35538f33a87e950b156.jpg")
        let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
            guard let _ = data,error == nil else { return }
            //回到主线程
            DispatchQueue.main.sync {
                self.headView.image = UIImage(data: data!)
            }
        }
        task.resume()

  • 学习代码:

  • ViewController.swift

    import UIKit
    
    let YHRect = UIScreen.main.bounds
    let YHHeight = YHRect.size.height
    let YHWidth = YHRect.size.width
    
    let HeadViewHeight = YHHeight/3.0
    
    class ViewController: UIViewController {
    
        
        let datas = ["下","拉","可","以","出","现","很","神","奇","的","事","情","yo","yo","yo","yo","yo","yo"]
        let tableView = UITableView(frame: YHRect, style: .plain)
        let resueIdentifer = "CustomCell"
        let headView = UIImageView(frame: CGRect(x: 0.0, y: 0.0, width: YHWidth, height: HeadViewHeight))
        
        override func viewDidLoad() {
            super.viewDidLoad()
            setupView()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
        
        func setupView() {
            self.automaticallyAdjustsScrollViewInsets = false
            
            headView.backgroundColor = .white
            headView.contentMode = .scaleAspectFill
            headView.clipsToBounds = true
            view.addSubview(headView)
            
            //加载图片
            let url = URL(string: "http://c.hiphotos.baidu.com/zhidao/pic/item/5ab5c9ea15ce36d3c704f35538f33a87e950b156.jpg")
            let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
                guard let _ = data,error == nil else { return }
                //回到主线程
                DispatchQueue.main.sync {
                    self.headView.image = UIImage(data: data!)
                }
            }
            task.resume()
            
            tableView.delegate = self
            tableView.dataSource = self
            tableView.tableFooterView = UIView()
            tableView.register(UITableViewCell.self, forCellReuseIdentifier: resueIdentifer)
            tableView.showsVerticalScrollIndicator = false
            //下面两句必不可少,否则会出现第一次加载时位置不对的情况
            tableView.contentInset.top = HeadViewHeight
            tableView.contentOffset = CGPoint(x: 0.0, y: -HeadViewHeight)
    //        tableView.scrollIndicatorInsets.top = HeadViewHeight//右边指示器的位置
            view.addSubview(tableView)
            view.sendSubview(toBack: tableView)
        }
    
    }
    
    extension ViewController:UITableViewDataSource, UITableViewDelegate {
        //MARK: - DataSource
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return datas.count
        }
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: resueIdentifer, for: indexPath)
            cell.textLabel?.text = datas[indexPath.row]
            cell.textLabel?.textAlignment = .center
            return cell
        }
        
        //MARK: - Delegate
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 50
        }
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            tableView.deselectRow(at: indexPath, animated: true)
        }
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
            let offsety = scrollView.contentOffset.y + scrollView.contentInset.top
            if offsety <= 0 {
                headView.frame = CGRect(x: 0.0, y: 0.0, width: YHWidth, height: HeadViewHeight-offsety)
            }else {
                let height = (HeadViewHeight-offsety) <= 0.0 ? 0.0 : (HeadViewHeight-offsety)
                headView.frame = CGRect(x: 0.0, y: 0.0, width: YHWidth, height: height)
                headView.alpha = height/HeadViewHeight
            }
        }
    }
    

    你可能感兴趣的:(12.)