Хорошо, давайте попробуем понять, о чем просит ОП. У него есть viewController, который загружает веб-страницу, и, по его мнению, его загрузка занимает слишком много времени, и он не хочет заставлять пользователя ждать так долго. Также, согласно его вопросу о времени запуска, я предполагаю, что контроллер представления является первым контроллером представления, который он будет отображать после запуска приложения.
Случай 1: WebViewVC является первым VC после запуска
Здесь максимальное время «предварительной выборки», которое мы можем получить, это время, которое мы получаем, когда вызывается приложение метода: didFinishLaunchingWithOptions:. Предполагая, что здесь выполняется не так много процессорного процесса, времени на предварительную выборку не будет. Таким образом, единственный вариант - показать экран, который в пользовательском интерфейсе должен быть похож на launchScreen, чтобы пользователь мог считать его приложением, которое все еще загружается. (Лично я бы сделал экран запуска в виде экрана, который просто отображает цвет темы приложения и анимировал мой первый экран в качестве экрана запуска с помощью значка приложения или около того; это дает лучший профессиональный подход и достаточно времени для меня, чтобы катиться)
Случай 2: WebViewVC - не первый VC
Здесь, приложение будет отображать пользователю другой VC, прежде чем перейти к webViewVC, так что у нас будет время, необходимое для предварительной выборки данных. В этом случае я бы начал извлекать данные, пока viewDidLoad предыдущего VC. Очевидно, что webViewVC будет вызываться после некоторых действий, и у вас будет время до того, как это действие будет выполнено (вероятно, пользователем).
Загрузка ВК с помощью экрана запуска DUMMY
let webViewVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
let wwConfiguration = WKWebViewConfiguration()
let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height), configuration: wwConfiguration)
webView.navigationDelegate = webViewVC
webView.uiDelegate = webViewVC
let url = URL(string:"https://www.codemag.com/article/1405051/Understanding-and-Using-iBeacons")
webView.load(URLRequest(url: url!))
webViewVC.webView = webView
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
webViewVC.modalPresentationStyle = .popover
let popover = webViewVC.popoverPresentationController!
//popover.delegate = webViewVC
popover.permittedArrowDirections = .up
webViewVC.loadView()
self.present(webViewVC, animated: true, completion: nil)
webViewVC.showWebView()
}
Этот код создает экземпляр webviewVC и начинает загрузку данных, но отображается только через 10 секунд времени предварительной выборки. Метод showWebView () это просто
func showWebView() {
view.addSubview(webView)
}
- Вы можете использовать ответ @AshleyMills для загрузки веб-просмотра после завершения выборки данных или
- Вы можете загрузить webView с некоторой задержкой (в моем примере это 10 секунд) или
- Вы можете загрузить страницу как действие (например, при нажатии кнопки), изменив весь код внутри
DispatchQueue.main.asyncAfter()
на действие кнопки. Здесь вы можете использовать код @AshleyMills для включения кнопки после завершения отведения.
Ура!