У меня 2 ВК (основной и серверный).На главной у меня есть действие кнопки, которое откроет вид на сервер.В представлении сервера у меня есть входы для адреса сервера и логина.Я собираюсь получить идентификатор сеанса с сервера и вызвать 2-ю функцию, чтобы выполнить вход с использованием идентификатора сеанса.В случае неправильного адреса или высокой задержки я хочу показать индикатор активности при выполнении http-запроса.Проблема в том, что индикатор не отображается.Он вызывается и работает просто не видно.Я перепробовал все возможные решения, которые я нашел на stackoverflow.Что я заметил, так это то, что когда я нажимаю кнопку «Меню» на пульте дистанционного управления (после истечения времени ожидания сервера), я не перехожу на главный экран, а вместо этого отображает индикатор работающей активности.И еще одна вещь, я использую DispatchSemaphore внутри функций http-запроса, потому что мне нужен идентификатор сеанса с сервера, прежде чем будет выполнена 2-я часть (которая использует идентификатор сеанса).Является ли DispatchSemaphore причиной здесь?
SpinnerViewController:
import UIKit
class SpinnerViewController: UIViewController {
var spinner = UIActivityIndicatorView(style: .whiteLarge)
override func loadView() {
view = UIView()
view.backgroundColor = UIColor(white: 0, alpha: 0.7)
spinner.translatesAutoresizingMaskIntoConstraints = false
spinner.startAnimating()
view.addSubview(spinner)
spinner.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
spinner.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
}
Функция для http-запроса выглядит следующим образом:
func ServerLoginPullInfo() -> Bool {
addChild(child)
child.view.frame = view.frame
view.addSubview(child.view)
child.didMove(toParent: self)
var errorDetected = false
let sem = DispatchSemaphore(value: 0)
//...http request / response code here
sem.wait()
if errorDetected == true {
print("ERRRRRRRRRRRRRRRROR")
return false
} else {ServerLoginSessionID()}
child.willMove(toParent: nil)
child.view.removeFromSuperview()
child.removeFromParent()
return true
}
Я также попытался просто позвонить в начале функции http-запроса.
activityIndicator.startAnimating ()
с индикатором, установленным на animating = false и hideswhenstopped = true и hidden = true.
Какие бы варианты я ни пробовал, он работает, но не виден икаким-то образом в качестве представления, к которому я затем смогу получить доступ с помощью кнопки «Меню» на пульте дистанционного управления, что также не так.
Любая идея, что не так?