SwiftSpinner при начальной загрузке не работает

При вызове SwiftSpinner на viewDidLoad Swift spinner не работает

Пожалуйста, найдите ниже код, который я использую,

override func viewDidLoad() {
        super.viewDidLoad()
            DispatchQueue.global(qos: .background).async {
                self.basicSync {(isSynced) in
                     DispatchQueue.main.async {
                         SwiftSpinner.hide()
                     }
                }
            }
            DispatchQueue.main.async {
                SwiftSpinner.show("Syncing")
            }
}

public func basicSync(completion: @escaping (Bool) -> ()) {
        //Sync related work
        completion("true")
}

Я не могу найти способ вызвать Swift spinner при начальной загрузке

Некоторые из методов, которые я пробовал с SwiftSpinner.Show из приведенного выше кода

  1. Звонить, SwiftSpinner.show("Syncing")

  2. Чтобы назвать это основным внутри основного потока

 DispatchQueue.main.async {
          DispatchQueue.main.async {
                SwiftSpinner.show("Syncing")
            }
          }
  1. Я смог добиться этого, когда это написано так,
DispatchQueue.main.async {
                DispatchQueue.main.async {
                    DispatchQueue.main.async {
                        SwiftSpinner.show("Syncing")
                    }
                }
            }

Но я не думаю, что это правильный стандарт кодирования, новый для Swift и технологии кодирования.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
213
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте добавить его в

viewdidappear

Ответ принят как подходящий

У меня была эта проблема раньше, вам нужно сделать следующее

func delay(seconds: Double, completion: @escaping () -> ()) {
    let popTime = DispatchTime.now() + Double(Int64( Double(NSEC_PER_SEC) * seconds )) / Double(NSEC_PER_SEC)
    DispatchQueue.main.asyncAfter(deadline: popTime) {
        completion()
    }
}

затем в поле зрения загрузился

override func viewDidLoad() {
    super.viewDidLoad()
    delay(seconds: 0.5) {
       SwiftSpinner.show("Syncing")
    }
}

Вот оно: Д

Спасибо, все работает отлично, если я правильно понимаю, что вызов main сразу после синхронизации был проблемой, и вы добавили время задержки для вызова Spinner в основном потоке, я прав? Я новичок в среде кодирования и пытаюсь понять код. Почему необходимо звонить с опозданием?

Jenny 09.04.2019 08:16

хм, по моему опыту, и эта проблема со всеми HUD выглядит так, как будто у них у всех одна и та же проблема, не только это, что-то, что-то имеет вид ограничения макета анимации, что-то меняется, даже градиент не будет работать, если вы поместите его внутри viewdidload , так что сделайте задержку, чтобы экран может загрузить все, размер пользовательского интерфейса и т. д., тогда он работает, что-то еще, что-то странное на данный момент:/

Ahmed Safadi 09.04.2019 10:49

Другие вопросы по теме