首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用CMMotionManager替代UIAccelerometer?

如何用CMMotionManager替代UIAccelerometer?
EN

Stack Overflow用户
提问于 2013-12-03 08:09:53
回答 1查看 7.1K关注 0票数 3

我是iOS开发的新手。

我按照Ray Wenderlich的教程创建了一个基于位置的小AR应用程序。但是,本教程使用的AR Toolkit已经有一段时间没有更新过了。它使用的UIAccelerometer从iOS 5开始就被弃用了,所以当我尝试在我的iPhone (iOS 7.0.4)上运行它时,Xcode告诉我有3个警告,所有的警告都是由UIAccelerometer引起的。

它导致的结果是,所有的标记都停留在屏幕的中心,一个接一个,倾斜完全不起作用。

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

这是source code。我添加了一些小函数,以便您可以手动添加Google数据库中没有的位置,但我不认为是这些函数导致了问题。

感谢您的提前帮助!

EN

回答 1

Stack Overflow用户

发布于 2014-02-13 08:20:45

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

我正在学习一些花边新闻来翻译一些--使用UIAccelerometer

代码语言:javascript
复制
[self setAccelometerManager [UIAccelerometer sharedAccelerometer]];

可能会变成

代码语言:javascript
复制
[self.motionManager = [[CMMotionManager alloc] init];

设置手动更新间隔,如

代码语言:javascript
复制
[[self accelerometerManager] setUpdateInterval: 0.25];

你可以拥有

代码语言:javascript
复制
self.motionManager.accelerometerUpdateInterval = 0.25;

并释放委托

代码语言:javascript
复制
self.accelerometerManager.delegate = nil;

现在会是

代码语言:javascript
复制
[self.motionManager stopDeviceMotionUpdates];

同样在链接中,我最终做了这样的事情:

代码语言:javascript
复制
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];
    }];

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20340384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档