Xcode: показываем экран загрузки во время рендеринга в wkwebview
К сожалению при использовании wkwebview на IOS, инициализация webkit довольно медлительна. И занимает при первом старте порядка 5-10 секунд. Потому для того чтобы «развлечь» пользователя во время ожидания можно показать например какую-то анимацию.
Загрузку можно организовать как-то так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
override func viewDidLoad() { super.viewDidLoad() let userContentController = WKUserContentController() userContentController.add(self, name: "doMessage") let webviewConfiguration = WKWebViewConfiguration() webviewConfiguration.userContentController = userContentController webview = WKWebView(frame: self.view.frame, configuration: webviewConfiguration) view.addSubview(webview!) webview?.uiDelegate=self; //разрешаем подмену алертов webview?.navigationDelegate = self webview?.allowsBackForwardNavigationGestures=false; webview?.isOpaque=false; webview?.backgroundColor=UIColor.clear; webview?.scrollView.backgroundColor=UIColor.clear; webview?.load(URLRequest(url: URL(string:"https://увувцувцу")!)); let jeremyGif = UIImage.gifImageWithName("images/anim") let imageView = UIImageView(image: jeremyGif) imageView.frame = CGRect(x: (self.view.frame.size.width-267)/2, y: (self.view.frame.size.height-300)/2, width: 267, height: 300) imageView.tag=100; view.addSubview(imageView); |
Результатом будет показ «фона» и анимации до показа страницы. Далее нам нужно отловить что рендеринг состоялся и убрать анимацию:
1 2 3 4 5 6 7 |
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { print("loaded") let ivt=self.view.viewWithTag(100); ivt?.removeFromSuperview(); webview?.isOpaque=true; } |