2

バックグラウンド プロセス内で複数の WKWebView ビューを作成し、すべての読み込みが完了したら、それらをメイン スレッドのビューに追加しようとしています。

各 WKWebView には JavaScript を介してレンダリングされたグラフが含まれているため、ロード時間は WKWebView ごとに約 1 秒かかるため、UI がブロックされないように処理をバックグラウンドにオフロードしようとしています。

これは、dispatch_get_main_queue がコメント アウトされている場合は正常に機能しますが、UI は 5 ~ 10 秒間ブロックされます。WKWebView の茶色の背景のみが表示され、Web ページのコンテンツは表示されません。

 var webViews : [WKWebView] = []   

 var myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
 dispatch_async(myQueue, {

 for i in 0...10
 {
      var url : NSURL? = NSURL(string:"http://google.com")
      var req = NSURLRequest(URL:url!)

      var webview = WKWebView(frame:CGRectMake(0, height * CGFloat(i), width, height))         
      webview.loadRequest(req)
      webview.backgroundColor = UIColor.brownColor()

      self.webViews.append(webview)
  }

    dispatch_async(dispatch_get_main_queue(),{

      for item in self.webViews
      {
         self.view.addSubview(item)
      }

     });
  });
4

2 に答える 2

0

ビューを作成している間でもデータが表示されるように、コンテナー ビューを作成した直後にコンテナー ビューに Web ビューを送信し、その要求をすぐに開始しないのはなぜですか? そのすべてが for ループにあり、対応する quque にディスパッチされます。プロセスをより非同期にしてみてください

于 2014-11-15T12:31:56.643 に答える