Как скрыть метку в viewModel с DispatchQueue - PullRequest
1 голос
/ 01 апреля 2020

У меня проблема, и я застрял. Не знаю, как это решить. Есть камера и несколько масок. Когда я открываю камеру и прокручиваю, чтобы выбрать одну из масок, я хочу показать объяснение, как использовать камеру с масками, и эти объяснения после появления должны исчезнуть через 3 секунды.

В viewController у меня есть:

    maskExplanationLabel.configure(viewModel.maskExplanationLabel)
    viewModel.shouldShowMaskExplanation()

и в modelViewController у меня есть:

var isCameraExplanationShown: Bool = false
var maskExplanationLabel: TextPresentable {
    TextViewModel(text: "camera.blank.explanation".localized(),
                  color: .white,
                  font: .montserratSemiBold(21),
                  isHidden: isCameraExplanationShown
    )
}

И функция, которая находится в нужном месте:

func shouldShowMaskExplanation() {
    if isCameraExplanationShown {
        return
    } else {
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.isCameraExplanationShown = true
        }
    }
}

Проблема в том, что он устанавливает значение true, и метка объяснения должна скрываться, но она скрывается только при выборе другой маски.

Я знаю, что самым простым способом было бы добавить dispatchQueue в viewController, но это прекрасно сработало бы, но я не хочу слишком сильно "tra sh" viewController. В swiftUI я бы использовал @State, но как это сделать с UIKit? Пожалуйста, помогите :) Спасибо!

...