1 - Вы должны использовать значение bool в userDefaults
UserDefaults.standard.bool(forKey: "parallaxStatusOn") // default is false
2- viewWillAppear
вызывается, когда вы диммируете представленный / всплывающий vc, поэтому в вашем случае вы используете settingsView, а не vc, чтобы убедиться, что он вызывается другим KVO или любым уведомителем, управляемым событиями
3 - если состояние включено и изменено на выключенное, убедитесь, что вы удаляете эффекты движения, если виртуальный канал все еще появляется (не освобожден, между прочим, сделайте это в других случаях проверки)
bgImage.motionEffects.forEach { bgImage.removeMotionEffect($0) }