如何做一款仿映客直播APP (Swift3.0版)

這里只做swfit更新的簡(jiǎn)單介紹 !

具體詳解http://www.itdecent.cn/p/b2674fc2ac35
源碼地址:https://github.com/one-tea/ZKKLiveAPP_Swift3.0

項(xiàng)目變化簡(jiǎn)介:

1.網(wǎng)絡(luò)請(qǐng)求

class ZKKNetRequest: NSObject {

      public class func get(_ url: String!, _ para: NSDictionary?, callBack: @escaping(_ data:Data? ,_ error:Error?) -> Void) -> Void{
        
        let  session = URLSession.shared
        
        let urlStr = NSMutableString.init(string: url)
        
        if let para = para {
            urlStr.append(encodeUniCode(parasToString(para) as NSString) as String)
        }
        
        var request = URLRequest(url: URL.init(string: urlStr as String)!)
        request.httpMethod = "GET"
        let dataTask = session.dataTask(with: request) { (data, responseObject, error) in

            guard let httpURLResponse = responseObject as? HTTPURLResponse, httpURLResponse.statusCode == 200,error == nil else{
                print("DataTask Error:\(error)")
                return
            }
            
            callBack(data, error);

        }
        
        dataTask.resume()
        
    }
    
    public class func post(_ url:String! , _ para:NSDictionary?, callBack: @escaping(_ data:Data? ,_ error : Error?) -> Void) -> Void{
    
        let  session = URLSession.shared;
        
        let urlStr = NSMutableString.init(string: url)
        if para != nil{
            
            urlStr.append(encodeUniCode(parasToString((para)!) as NSString) as String)

        }
        
        var request = URLRequest.init(url: URL.init(string: urlStr as String)!)
        request.httpMethod = "POST"
        let dataTask  = session.dataTask(with: request) { (data, responseObject, error) in
            
            guard let httpURLResponse = responseObject as? HTTPURLResponse, httpURLResponse.statusCode == 200, error == nil else{
            print("DataTask Error:\(error)")
            return
            }
            callBack(data,error)
        }
        
        dataTask.resume()
    
    }
    
    
    /* 特殊字符 */
    final class func encodeUniCode(_ string: NSString) ->NSString{
        
        return string.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)! as NSString
    }
    
    final class func parasToString (_ para:NSDictionary ) -> String {
        
        let paraString = NSMutableString.init(string: "?")
        for (key ,value) in para as! [String: String] {
            paraString.append("\(key)=\(value)&")
        }
        if paraString.hasSuffix("&"){
            paraString.deleteCharacters(in: NSMakeRange(paraString.length - 1, 1))
        }
        return String(paraString)
    }
}

2. 圖片加載

    
        /* 加載 */
        
        DispatchQueue.global().async { 
            
            let request = URLRequest(url: URL.init(string: urlString as String)!)
            
            URLSession.shared.dataTask(with: request) { (data, response, error) in
                guard
                    let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
                    let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
                    let data = data, error == nil,
                    let image = UIImage(data: data)
                    else { return }
                
                self.contentMode = UIViewContentMode.scaleToFill
                DispatchQueue.main.async(execute: {
                    self.image = image
                })
                }.resume()

            
        }
        /* 緩存后續(xù)在添加,當(dāng)然無(wú)法與SDImage性能相媲美,等待穩(wěn)定版本合適的第三方框架再用吧 */
        


  • Cell特效
        cell.layer.transform = CATransform3DMakeScale(0.8, 0.8, 1)
        UIView.animate(withDuration: 0.8, animations: {
            cell.layer.transform = CATransform3DMakeScale(1, 1, 1)
        }, completion: nil)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,030評(píng)論 4 61
  • 在此特此聲明:一下所有鏈接均來(lái)自互聯(lián)網(wǎng),在此記錄下我的查閱學(xué)習(xí)歷程,感謝各位原創(chuàng)作者的無(wú)私奉獻(xiàn) ! 技術(shù)一點(diǎn)一點(diǎn)積...
    遠(yuǎn)航的移動(dòng)開發(fā)歷程閱讀 11,527評(píng)論 12 197
  • 1.調(diào)試 2.項(xiàng)目填寫及勾選 2.1. Bundle Identifier填寫及Team勾選 2.2. Code ...
    曾令偉閱讀 316評(píng)論 0 0
  • 字符串是不可變字節(jié)(byte)序列,默認(rèn)值是"",而不是nil。使用 “`” 定義的原始字符串(raw strub...
    勿以浮沙筑高臺(tái)閱讀 2,657評(píng)論 0 0
  • 1. 為什么前端架構(gòu) 減少開發(fā)時(shí)間 降低開發(fā)成本 降低代碼沖突 2. 實(shí)現(xiàn)目標(biāo) 程序員只需要寫自己的模塊 切換主題...
    imdba閱讀 4,278評(píng)論 0 4

友情鏈接更多精彩內(nèi)容