最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ios開發(fā)加載webview顯示進度條實例

 更新時間:2017年05月18日 11:55:50   作者:搬運工開發(fā)者  
本篇文章主要介紹了ios開發(fā)加載webview顯示進度條實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

很多APP加載webView頁面的時候都有進度條顯示,今天我們這里主要使用相對輕量級的WKWebView加載網頁,至于WKWebView 和UIWebView的區(qū)別與聯系這里就不多講了,自己百度哈哈。。。

WKWebView加載網頁進度跳顯示主要效果如下:

這里主要是使用KVO監(jiān)聽WKWebView的“estimatedProgress”屬性,通過監(jiān)聽該屬性的變化才是進度條的長度。

1、定義便利構造函數、以及屬性和控件

var url: String?
  var progresslayer = CALayer()
  var webView: WKWebView?
  var button: UIButton?
convenience init(title: String, url: String) {
    self.init()
    self.title = title
    self.url = url
  }

2、創(chuàng)建webview控件,并監(jiān)聽estimatedProgress,進度條初始化的時候會給一定的長度顯示(原因下面解釋)。

func setupUI() {
    webView = WKWebView(frame: CGRect.init(x: 0, y: 0, width: screenWidth, height: screenHeight-64.0))

    if url == "" {
      url = "http:www.baidu.com"
    }
    let request = URLRequest(url: URL(string: url ?? "http:www.baidu.com")!)
    webView?.load(request)
    webView?.uiDelegate = self
    webView?.navigationDelegate = self;
    view.addSubview(webView!)

    //添加屬性監(jiān)聽
    webView?.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
    progresslayer.frame = CGRect.init(x: 0, y: 0, width: screenWidth * 0.1, height: 3)
    progresslayer.backgroundColor = UIColor.green.cgColor
    view.layer.addSublayer(progresslayer)
  }

3、監(jiān)聽estimatedProgress屬性變化,并修改進度條長度,創(chuàng)建進度條的時候之所以給一定的默認長度主要是因為在沒有網絡的狀態(tài)下會立即進度float == 1條件,這樣給人的感覺就是沒有加載網頁一樣。

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "estimatedProgress" {
      progresslayer.opacity = 1
      let float = (change?[NSKeyValueChangeKey.newKey] as! NSNumber).floatValue
      progresslayer.frame = CGRect.init(x: 0, y: 0, width: (screenWidth * CGFloat(float)) , height: 3)
      if float == 1 {
        weak var weakself = self
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: {
          weakself?.progresslayer.opacity = 0
        })
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.8, execute: {
          weakself?.progresslayer.frame = CGRect.init(x: 0, y: 0, width: 0, height: 3);
        })
      }
    }else{
      super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
    }
  }

4、web view加載失敗后提示

extension KKWebView : WKUIDelegate, WKNavigationDelegate {
  func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
    guard let btn = button else {
      button = UIButton(type: .system)
      button?.frame = CGRect.init(x: 0, y: 3, width: screenWidth, height: screenHeight-64-3)
      button?.backgroundColor = UIColor.white
      button?.setTitleColor(UIColor.darkText, for: .normal)
      button?.setTitle("點擊重新加載", for: .normal)
      button?.addTarget(self, action: #selector(loadURL), for: .touchUpInside)
      view.addSubview(button!)
      return
    }
    btn.isHidden = false
  }
}

5、記載失敗后點擊提示重新加載

 func loadURL() {
    button?.isHidden = true
    if url == "" {
      url = "http:www.baidu.com"
    }
    let request = URLRequest(url: URL(string: url ?? "http:www.baidu.com")!)
    webView?.load(request)
  }

5、移除監(jiān)聽,離開頁面的時候需要移除KVO監(jiān)聽,否則會出現內存泄露

deinit {
    webView!.removeObserver(self, forKeyPath: "estimatedProgress")
  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解 iOS 系統中的視圖動畫

    詳解 iOS 系統中的視圖動畫

    這篇文章主要介紹了iOS 系統中的視圖動畫的的相關資料,幫助大家更好的理解和學習使用ios開發(fā),感興趣的朋友可以了解下
    2021-02-02
  • iOS中奇妙的三目運算符示例詳解

    iOS中奇妙的三目運算符示例詳解

    大家都知道在oc中可以使用三目運算符來進行條件的判斷,這相對于if else 來說更加的簡潔,下面這篇文章主要給大家介紹了關于iOS中奇妙的三目運算符的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-07-07
  • 詳解ios中scrollView上使用masonry

    詳解ios中scrollView上使用masonry

    本篇文章主要給大家詳細分析了ios開發(fā)中scrollView上使用masonry的詳細知識內容,需要的朋友參考下吧。
    2018-02-02
  • iOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文章就給大家介紹了iOS中MD5加密算法,已經iOS中MD5加密算法的使用,有需要的朋友們可以參考借鑒。
    2016-10-10
  • IOS實現驗證碼倒計時功能(二)

    IOS實現驗證碼倒計時功能(二)

    這篇文章主要介紹了IOS實現驗證碼倒計時功能,點擊獲取驗證碼,進入時間倒計時,感興趣的小伙伴們可以參考一下
    2016-04-04
  • IOS 中CALayer繪制圖片的實例詳解

    IOS 中CALayer繪制圖片的實例詳解

    這篇文章主要介紹了IOS 中CALayer繪制圖片的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • iOS使用xib手動實現動畫效果的方法

    iOS使用xib手動實現動畫效果的方法

    下面小編就為大家分享一篇iOS使用xib手動實現動畫效果的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • iOS快速實現環(huán)形漸變進度條

    iOS快速實現環(huán)形漸變進度條

    之前看到很多環(huán)形進度條,看上去很酷,然后就試著學習他們的代碼,結果發(fā)現實現一個環(huán)形進度條一點也不簡單。我就在想一個簡單的進度條有這么復雜嗎?自己摸索后,有一個簡單的實現方法。現在分享給大家,有需要的朋友們可以參考借鑒。
    2016-10-10
  • iOS開發(fā)中音頻視頻播放的簡單實現方法

    iOS開發(fā)中音頻視頻播放的簡單實現方法

    視頻音頻是我們在ios日常開發(fā)中經常會遇到的一個需求,所以下面這篇文章主要給大家介紹了關于iOS開發(fā)中音頻視頻播放的簡單實現方法,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • iOS開發(fā)之UITableView左滑刪除等自定義功能

    iOS開發(fā)之UITableView左滑刪除等自定義功能

    今天來給大家介紹下iOS開發(fā)中UITableView左滑實現微信中置頂,刪除等功能。對大家開發(fā)iOS具有一定的參考借鑒價值,有需要的朋友們一起來看看吧。
    2016-09-09

最新評論

顺平县| 梨树县| 宁陵县| 阳江市| 崇礼县| 尚志市| 淅川县| 苏尼特左旗| 二连浩特市| 双城市| 都昌县| 辉县市| 沅江市| 洛宁县| 张家界市| 仙桃市| 朝阳县| 盐边县| 伊宁县| 清河县| 崇州市| 石家庄市| 民勤县| 榆中县| 宜城市| 通渭县| 巨野县| 荆门市| 札达县| 德安县| 青州市| 永善县| 轮台县| 太原市| 保德县| 托克托县| 宿迁市| 宁明县| 莆田市| 和静县| 万盛区|