Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > WKWebview

WKWebview

UIWebViewと同じWebKitを利用しているブラウザコントロール。実行速度、安定性、機能性でUIWebViewよりも勝るとの事ですが、まだ動作不安定な報告もiOS8.1の時点ではされているようですので、 慎重に理想する方がいいかもしれません。UIWebViewを利用しているアプリはWKWebViewに切り替えるだけで処理が改善される可能性も高そうです。

参考:WKWebViewで躓いた10つのまとめ
参考:ハイブリッドアプリの動作性能を飛躍的にアップさせるiOS 8の新ブラウザエンジンを検証する
参考:WKWebView and JavaScript in iOS 8 - using Swift
参考:SwiftでWKWebViewを使ってみた

何がUIWebViewと違うのか

WebGLを正式にサポートを開始

といってもこれはUIWebViewにもiOS8からサポートされているので、特に差にはなっていないのかもしれません

HTML5やCSS3との連動

HTML5はWKWebViewの方が少し勝っている状態。ただし、555満点中でUIWebViewが427、WKWebViewが440とそこまで大差ないようですので、 あまり大きな違いと言えないと思われます。CSS3は同じポイントで差は無いようです。

IndexedDBが有効になりました

トランザクション等を管理するデータベースエンジンです。行と列の従来のデータベースではなくデータをオブジェクトとして保存する次世代DBなのかなと思われます。 以下のサイト様がわかりやすかったので共有です。
HTML5 の IndexedDB を使用した簡単な TODO リスト

Javascript

この数値が大きくかわるようです。UIWebViewではクラッシュしているJSもWKWebViewでは処理できたり、重い処理でも4倍程度の処理速度のようです。 JSをアプリ内で多く実行しているアプリは恩恵を大きく受けるのではと思います。以下サイトではJSが中心のアプリであれば20%程度のパフォーマンスが改善できるのではとのことです。
ハイブリッドアプリの動作性能を飛躍的にアップさせるiOS 8の新ブラウザエンジンを検証する (2ページ目)

やってみた

UIWebViewとはdelegateの箇所が違います。UIWebViewDelegateからWKNavigationDelegateに変わっているようです。


import UIKit
import WebKit

class ViewController: UIViewController,WKNavigationDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let webView = WKWebView(frame: CGRectZero, configuration: WKWebViewConfiguration())
        webView.setTranslatesAutoresizingMaskIntoConstraints(false)
        webView.navigationDelegate = self
        view.addSubview(webView)
        
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[webView]|", options: NSLayoutFormatOptions.allZeros, metrics: nil, views: ["webView": webView]))
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: NSLayoutFormatOptions.allZeros, metrics: nil, views: ["webView": webView]))
        
        let url = NSURL(string: "http://swift-salaryman.com")
        let request = NSURLRequest(URL: url!)
        webView.loadRequest(request)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) {
        //println("Finished navigating to url \(navigation.request.URL)")
    }
    
}

Wkwebview実行結果

以下サイトを参考にしました。

参考:WKWebView Content loaded function never get called


追加(2015/1/5)

WebViewでモバイル表示Useragentを変更する簡単な方法。よければこちらもどうぞ

↓こんな記事もありますよ!

デバッグ時とリリース時に処理を変更する#ifdef DEBUG のやり方

DEBUG時だけ特定の動作をさせて、リリース時に排除したい、そんな時に利用する方法です。Swiftでは標準ではDEBUGとリリースの判断がつかないので、 コンパイル時に設定する必要があります

NSNotificationCenterでコード間のイベントやりとり

AppDelegateのイベント(アプリがアクティブ)になるタイミングでViewControllerに通知する為にはどうすればいいのか?と 調査しているとこのクラスにたどり着きました。delegateを利用せずにイベントの通知をViewController間で簡単に実装できるので 使いやすいです!

UINavigationController

TabBarとUITableViewControllerを利用して一つのUIViewControllerだけをクリックすると右にスライドするUINavigationControlerを 利用したサンプルを記載します。というのも、AppDelegate内でUINavigationをself.windowのrootviewcontrollerにセットする 方法は多々あったのですが、AppDelegate内を利用しないでNavigationを実装する方法がなくハマっていましたのでを以下記載します
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!