Вы можете считать «калибровку» постоянной ссылкой на какое-либо корневое значение или состояние. Если вы хотите сбросить калибровки, просто сбросьте корневое значение, из которого получены все остальные значения. С акселерометром у вас есть возможность узнать, когда изменение обнаружено с помощью обратного вызова делегата, поэтому все, что вам нужно сделать, это написать метод для «захвата» текущего состояния акселерометра.
В учебнике , описанном здесь , такой метод обозначен как:
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
calibration = acceleration.y;
}
Но это не так "контролируется", как хотелось бы. Вместо этого либо прервите свое отношение к UIAccelerometer
в качестве делегата, либо окружите его свойством BOOL
ean, указывающим, разрешите ли вы выполнять калибровку. Примерно так должно работать просто отлично:
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
if (self.allowsCalibration)
calibration = acceleration.y;
}