Использование UserDefaults в viewWillAppear - PullRequest
1 голос
/ 27 апреля 2019

Я настраиваю страницу настроек (в классе SettingsView), где пользователи могут установить «Вкл» / «Выкл» для фонового эффекта параллакса. Выбор сохраняется в UserDefaults().string(forKey: "parallaxStatus"). В viewWillAppear класса ViewController я проверил parallaxStatus. Если статус эффекта параллакса «Вкл.», То этот эффект отображается. Если статус «Выкл», то ничего не должно происходить.

Проблема появилась, когда parallaxStatus изменилось с «Вкл.» На «Выкл.». В этом случае эффект параллакса все еще отображался до перезагрузки просмотра. Но если параметр parallaxStatus изменился с «Выкл.» На «Вкл.», Функция работает хорошо без перезагрузки просмотра.

Ниже приведен код функции viewWillAppear. Спасибо за любую помощь или подсказку.

    override func viewWillAppear(_ animated: Bool) {

    let parallaxStatus = UserDefaults().string(forKey: "parallaxStatus")

    if parallaxStatus == "On" {

        let min = CGFloat(-40)
        let max = CGFloat(40)

        let xMotion = UIInterpolatingMotionEffect(keyPath: "layer.transform.translation.x", type: .tiltAlongHorizontalAxis)
        xMotion.minimumRelativeValue = min
        xMotion.maximumRelativeValue = max

        let yMotion = UIInterpolatingMotionEffect(keyPath: "layer.transform.translation.y", type: .tiltAlongVerticalAxis)
        yMotion.minimumRelativeValue = min
        yMotion.maximumRelativeValue = max

        let motionEffectGroup = UIMotionEffectGroup()
        motionEffectGroup.motionEffects = [xMotion,yMotion]

        bgImage.addMotionEffect(motionEffectGroup) } else { }

}

1 Ответ

1 голос
/ 27 апреля 2019

1 - Вы должны использовать значение bool в userDefaults

UserDefaults.standard.bool(forKey: "parallaxStatusOn") // default is false

2- viewWillAppear вызывается, когда вы диммируете представленный / всплывающий vc, поэтому в вашем случае вы используете settingsView, а не vc, чтобы убедиться, что он вызывается другим KVO или любым уведомителем, управляемым событиями

3 - если состояние включено и изменено на выключенное, убедитесь, что вы удаляете эффекты движения, если виртуальный канал все еще появляется (не освобожден, между прочим, сделайте это в других случаях проверки)

bgImage.motionEffects.forEach { bgImage.removeMotionEffect($0) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...