質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

442閲覧

WKWebViewのestimatedProgressの値が常に0.0でプログレスバーの進捗度が変わらない。

TomofumiKimura

総合スコア65

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/03/03 11:20

編集2019/03/03 11:21

今やりたいことはWKWebViewがページを読み込んでるときに進捗状況をProgressViewで表示したいです。
ProgressViewは見えているのですが、読み込むときに進捗が変わっていません。
なのでProressViewはestimatedProgressが0.0の時のままです。
ご教授をお願いいたします。

Swift

1import UIKit 2import WebKit 3class HomeViewController: UIViewController{ 4 5 @IBOutlet weak var wkWebView: WKWebView! 6 var progBar = UIProgressView() 7 var targetURL = App.API.domain 8 var titleName = "" 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 UITabBar.appearance().tintColor = UIColor.black 12 self.tabBarController?.selectedIndex = 0 13 // WKWebView 作成 14 let wkWebView = WKWebView() 15 wkWebView.frame = view.frame 16// progBar.progressViewStyle = .bar 17 // WKWebViewのプロパティのestimatedProgresswを監視するObserverをWKWebViewに付与 18 wkWebView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil) 19 wkWebView.addObserver(self, forKeyPath: "loading", options: .new, context: nil) 20// スワイプでの戻る進むを有効にする 21 wkWebView.allowsBackForwardNavigationGestures = true 22 wkWebView.navigationDelegate = self 23 wkWebView.uiDelegate = self 24 wkWebView.wkWebViewBasicAuthLoad(urlString: self.targetURL) 25 let tab = self.tabBarController as! CustomTabBarController 26 view.addSubview(wkWebView) 27 // Progress Bar 作成 28 progBar = UIProgressView(frame: CGRect(x: 0, y: 64, width: self.view.frame.width, height: 50)) 29 // プログレスバーの進捗率を0% 30 progBar.progress = 0.0 31 print("WKWebView22 estimatedProgress Value (self.wkWebView.estimatedProgress)") 32 // プログレスバーの色を赤 33// 進捗を表すメモリの色 34 progBar.progressTintColor = UIColor.blue 35 //未実施部分の色 36 progBar.trackTintColor = UIColor.green 37 38 // Progress bar を加える 39 wkWebView.addSubview(progBar) 40 41 } 42 43 override func viewDidAppear(_ animated: Bool) { 44 } 45 // 監視しているおオブジェクトに何か変化があったときに監視している物に知らせる 46 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 47 if (keyPath == "estimatedProgress") { 48 // estimatedProgressに変化があった場合 49 self.progBar.alpha = 1.0 50 print("WKWebView estimatedProgress Value (self.wkWebView.estimatedProgress)") 51 // estimatedProgressが変更されたときにプログレスバーの値を変更 52 self.progBar.setProgress(Float(self.wkWebView.estimatedProgress), animated: true) 53 // progBar.setProgress(Float(wkWebView.estimatedProgress), animated: true) 54 // estimatedProgressが1.0になったらアニメーションを使って非表示にしアニメーション完了時0.0をセットする 55 if self.wkWebView.estimatedProgress >= 1.0 { 56 UIView.animate(withDuration: 0.3, delay: 0.3, options: UIView.AnimationOptions.curveEaseOut, animations: {() -> Void in 57 self.progBar.alpha = 0.0 58 }, completion: {(finished: Bool) -> Void in 59 self.progBar.setProgress(0.0, animated: false) 60 61 }) 62 } 63 }else if (keyPath == "loading"){ 64 UIApplication.shared.isNetworkActivityIndicatorVisible = self.wkWebView.isLoading 65 if (self.wkWebView.isLoading) { 66 self.progBar.setProgress(0.1, animated: true) 67 }else{ 68 self.progBar.setProgress(0.0, animated: false) 69 } 70 } 71 } 72 73 deinit { 74 // estimatedProgresswを監視しているObserverをし消去 75 self.wkWebView.removeObserver(self, forKeyPath: "estimatedProgress", context: nil) 76 self.wkWebView.removeObserver(self, forKeyPath: "loading", context: nil) 77 } 78}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@IBOutlet weak var wkWebView: WKWebView!
でアウトレットで繋いでいるwkWebViewと
override func viewDidLoad()内でローカル変数宣言しているlet wkWebView = WKWebView()は別インスタンスではないですか?

アウトレット接続をやめて、ローカルで作ったインスタンスをメンバで保持するようにすれば行けるかと思います。

投稿2019/03/04 01:52

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問