Ios 如何用CMMotionManager替换UIAccelerator?
我是iOS开发新手 我按照中的教程创建了一个基于位置的AR应用程序。但是,本教程使用了一段时间未更新的。它使用的UIAccelerator自iOS 5以来就已被弃用,因此当我尝试在iPhone(iOS 7.0.4)上运行它时,Xcode表示有3个警告,所有这些警告都是由UIAccelerator引起的 其结果是,所有标记都位于屏幕中心,一个接一个,倾斜根本不起作用 根据我的研究,我想我需要做的是使用CMMotionManager而不是UIAccelerator,但正如我之前所说的,我对iOS开发完全陌生,不知道如何替换它 这是你的电话号码。我添加了一些小功能,这样您就可以手动添加不在Google数据库中的位置,但我不认为是这些功能导致了这个问题 提前谢谢你的帮助 试试这个链接: 我正在学习一些花絮,用它来翻译一些东西 i、 e 可能成为Ios 如何用CMMotionManager替换UIAccelerator?,ios,iphone,accelerometer,augmented-reality,core-motion,Ios,Iphone,Accelerometer,Augmented Reality,Core Motion,我是iOS开发新手 我按照中的教程创建了一个基于位置的AR应用程序。但是,本教程使用了一段时间未更新的。它使用的UIAccelerator自iOS 5以来就已被弃用,因此当我尝试在iPhone(iOS 7.0.4)上运行它时,Xcode表示有3个警告,所有这些警告都是由UIAccelerator引起的 其结果是,所有标记都位于屏幕中心,一个接一个,倾斜根本不起作用 根据我的研究,我想我需要做的是使用CMMotionManager而不是UIAccelerator,但正如我之前所说的,我对iOS开发
[self.motionManager = [[CMMotionManager alloc] init];
设置手动更新间隔,如
[[self accelerometerManager] setUpdateInterval: 0.25];
你可以
self.motionManager.accelerometerUpdateInterval = 0.25;
并释放该代表
self.accelerometerManager.delegate = nil;
现在应该是
[self.motionManager stopDeviceMotionUpdates];
同样在链接中,我最终做了如下事情:
motionManager = [[CMMotionManager alloc] init];
motionManager.accelerometerUpdateInterval = 1.0/10.0; // Update at 10Hz
if (motionManager.accelerometerAvailable) {
queue = [NSOperationQueue currentQueue];
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
switch (currentOrientation) {
case UIDeviceOrientationLandscapeLeft:
viewAngle = atan2(accelerometerData.acceleration.x, accelerometerData.acceleration.z);
break;
case UIDeviceOrientationLandscapeRight:
viewAngle = atan2(-accelerometerData.acceleration.x, accelerometerData.acceleration.z);
break;
case UIDeviceOrientationPortrait:
viewAngle = atan2(accelerometerData.acceleration.y, accelerometerData.acceleration.z);
break;
case UIDeviceOrientationPortraitUpsideDown:
viewAngle = atan2(-accelerometerData.acceleration.y, accelerometerData.acceleration.z);
break;
default:
break;
}
[self updateCenterCoordinate];
}];
}
关于更换
ui加速计
请查看并@Kay感谢您的评论,但我仍然没有任何线索来修复它。你介意花点时间看看代码并给我一些指导吗?非常感谢!这是错误的,设备运动并不等同于获取加速计数据。它确实包含它,但它不像UIS加速计那样原始,而且它的过程更密集。CoreMotion可以处理加速度计。@Chiquis CMMotion不是CoreMotion吗?我很困惑。我猜你的意思是使用CMAcceleration
motionManager = [[CMMotionManager alloc] init];
motionManager.accelerometerUpdateInterval = 1.0/10.0; // Update at 10Hz
if (motionManager.accelerometerAvailable) {
queue = [NSOperationQueue currentQueue];
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
switch (currentOrientation) {
case UIDeviceOrientationLandscapeLeft:
viewAngle = atan2(accelerometerData.acceleration.x, accelerometerData.acceleration.z);
break;
case UIDeviceOrientationLandscapeRight:
viewAngle = atan2(-accelerometerData.acceleration.x, accelerometerData.acceleration.z);
break;
case UIDeviceOrientationPortrait:
viewAngle = atan2(accelerometerData.acceleration.y, accelerometerData.acceleration.z);
break;
case UIDeviceOrientationPortraitUpsideDown:
viewAngle = atan2(-accelerometerData.acceleration.y, accelerometerData.acceleration.z);
break;
default:
break;
}
[self updateCenterCoordinate];
}];
}