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];

0 ответов

Другие вопросы по тегам