Я пытаюсь запустить два разных сегмента в зависимости от значения оси Y на гироскопе. По сути, наклон вверх (в левом ландшафте) вызовет VC "Pointed Up", с + y
и наклона вниз, VC "Pointed Down" со значением -y.
После того, как эти VC сработали, мне нужно прекратить обновления гироскопа, пока один из двух сработавших VC не будет перемотан после соответствующих задержек.
Затем перезапустите обновления гироскопа.
Я попытался создать оператор if / else и представить эти значения в переменной и возвратил его, но когда я пытаюсь вызвать возвращаемое значение, возникает ошибка "Результат вызова startGyroScope () не используется"
//Declared just after class is initialised
var correctAnswer = true
var motionManager = CMMotionManager()
...
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
startGyroScope()
let answerGiven = startGyroScope()
performAnswerSegue(triggeredAnswer: answerGiven)
}
...
func startGyroScope() -> Bool {
var pickedAnswer: Bool = true
motionManager.gyroUpdateInterval = 0.25
motionManager.startGyroUpdates(to: OperationQueue.current!) { (data, error) in
if let gyroData = data{
let y = gyroData.rotationRate.y
//User tilted for true
if y > 2 {
pickedAnswer = true
self.motionManager.stopGyroUpdates()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
self.motionManager.startGyroUpdates()
}
}
//User tilted for false
else if y < -2 {
pickedAnswer = false
self.motionManager.stopGyroUpdates()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
self.motionManager.startGyroUpdates()
}
}
}
}
return pickedAnswer
}
...
func performAnswerSegue(triggeredAnswer: Bool) {
if correctAnswer == triggeredAnswer {
performSegue(withIdentifier: "pointedUpVC", sender: self)
}
else if correctAnswer != triggeredAnswer{
performSegue(withIdentifier: "pointedDownVC", sender: self)
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
self.dismiss(animated: true, completion: nil)
}
}
гироскоп Раскадровка