CMMotionManager миксер камеры всегда находится на севере (ios7)
Я использую пример mixare, чтобы сделать вид с камеры на POI. Я загрузил пример mixare, размещенный здесь пример Mixare, и обновил и изменил код UIAccelerometer на CMMotionManager, потому что он не обновлен для работы с последним sdk.
Проблема в том, что когда я запускаю проект, радар всегда исправлен, и моя камера показывает на нем мои POI, но только потому, что радар наблюдает за севером, а мой POI находится на радаре. Если вы выставите больше точек интереса не на севере, они появятся на радаре, но я не могу повернуть камеру в другое положение, она всегда показывает север. Радар никогда не меняет ориентацию, всегда смотрит на север, и мои POI всегда находятся в одном и том же месте на камере, даже если я перемещаю их.
Пожалуйста, дайте мне несколько идей, я сейчас потерялся. Спасибо
Я сделал это в своем коде по методу "startListening:(CLLocationManager*)locManager"...
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.accelerometerUpdateInterval = 0.01; //en segundos
self.motionManager.gyroUpdateInterval = .1; //en segundos
self.motionManager.magnetometerUpdateInterval = .2;
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
{
[self outputAccelertionData:accelerometerData.acceleration];
if(error)
NSLog(@"%@", error);
}];
if (!self.centerCoordinate) {
self.centerCoordinate = [[PoiItem alloc] initCoordinateWithRadialDistance:0 inclination:0 azimuth:0];
}
и на методе outputAccelertionData...
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) {
rollingZ = (acceleration.z * kFilteringFactor) + (rollingZ * (1.0 - kFilteringFactor));
rollingX = (acceleration.x * kFilteringFactorX) + (rollingX * (1.0 - kFilteringFactorX));
} else {
rollingZ = (acceleration.z * kFilteringFactor) + (rollingZ * (1.0 - kFilteringFactor));
rollingX = (acceleration.y * kFilteringFactorX) + (rollingX * (1.0 - kFilteringFactorX));
}
if (rollingZ > 0.0) {
self.centerCoordinate.inclination = atan(rollingX / rollingZ) + M_PI / 2.0;
} else if (rollingZ < 0.0) {
self.centerCoordinate.inclination = atan(rollingX / rollingZ) - M_PI / 2.0;// + M_PI;
} else if (rollingX < 0) {
self.centerCoordinate.inclination = M_PI/2.0;
} else if (rollingX >= 0) {
self.centerCoordinate.inclination = 3 * M_PI/2.0;
}
[self outputAccelertionData:acceleration];