【Swift】WKWebViewでWebページを表示

  

解説

 

・WebViewがdeprecated(非推奨)となり、今後はWebKit Viewを使用することになる

・インジケーターを一から設定し、座標やスタイルも設定

・インジケーターを起動させたり止めるには、WKNavigationDelegateでdidstart,didfinishを用意

・cachePolicy(キャッシュの設定)の詳しいことは、下記の記事がおすすめ。

qiita.com

 

ソースコード

import UIKit
import WebKit

class ViewController: UIViewController,WKNavigationDelegate{
    
    @IBOutlet weak var webView: WKWebView!
    
    //文字列となるURL
    let urlString = "https://www.youtube.com/watch?v=RHVA-K4XjjY"
    
    //インジゲーターを宣言
    var indicator = UIActivityIndicatorView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //インジケーターを起動
        setIndicator()
        
        //文字列のURLをURL型にキャスト
        guard let url = URL(string: urlString) else { return }
        
        //URLリクエストを作成
        //cachePolicy:Webページのキャッシュがあればそれを使用、なければリクエスト
        //timeoutInterVal:100秒でリクエストを終了
        let urlRequest = URLRequest(url: url,
                                    cachePolicy: .returnCacheDataElseLoad, timeoutInterval: 100)
        
        //webViewで表示させる
        webView.load(urlRequest)
        
    }
    
    @IBAction func back(_ sender: Any) {
        
        //戻る
        webView.goBack()
        
    }
    
    @IBAction func go(_ sender: Any) {
        
        //進む
        webView.goForward()
        
    }
    
    @IBAction func refresh(_ sender: Any) {
        
        //更新
        webView.reload()
        
    }
    
    func setIndicator() {
        
        //インジケーターを初期化
        indicator = UIActivityIndicatorView()
        //インジケーターの座標とサイズ
        indicator.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        //インジケーターが止まった時に非表示にするか?
        indicator.hidesWhenStopped = true
        //インジケーターの色
        indicator.style = .gray
        //webViewに追加
        webView.addSubview(indicator)
        
    }
    
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        
        //インジケーターを回す
        indicator.startAnimating()
        
    }
    
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        
        //インジケーターを止める
        indicator.stopAnimating()
        
    }
    
}