我正在使用 mixare 示例制作带有 POI 的相机视图。我确实下载了此处发布的mixare 示例 Mixare 示例并更新并将 UIAccelerometer 代码更改为 CMMotionManager,因为它没有更新为与最近的 sdk 一起使用。
问题是当我启动 proyect 时,雷达总是固定的,我的相机在上面显示我的 POI,但这只是因为雷达正在观察北方,而我的 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];