如何用CMMotionManagerreplaceUIAccelerometer?

我是iOS开发新手。

我遵循Ray Wenderlich的教程来创build一个基于位置的AR应用程序。 但是,本教程使用了一个尚未更新的AR Toolkit 。 它使用的UIAccelerometer已经被弃用,因为iOS 5,所以当我尝试在我的iPhone上运行它(iOS 7.0.4),Xcode说,有3个警告,并且所有这些都是由UIAccelerometer造成的。 警告

它导致的结果是所有的标记都在一个在另一个之上停留在屏幕的中心,并且倾斜根本不起作用。 问题

根据我的研究,我想我需要做的是使用CMMotionManager,而不是UIAccelerometer,但正如我之前所说,我对iOS开发是全新的,不知道如何replace它。

这里是源代码 。 我添加了一些小function,以便您可以手动添加不在Google数据库中的位置,但我不认为这是导致问题的function。

感谢您提前帮忙!

试试这个链接: https : //www.inkling.com/read/learning-ios-programming-alasdair-allan-2nd/chapter-9/the-core-motion-framework

我正在学习一些与UIAccelerometer相关的技巧

 [self setAccelometerManager [UIAccelerometer sharedAccelerometer]]; 

可能成为

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