Ios 如何用CMMotionManager替换UIAccelerator?

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开发

我是iOS开发新手

我按照中的教程创建了一个基于位置的AR应用程序。但是,本教程使用了一段时间未更新的。它使用的UIAccelerator自iOS 5以来就已被弃用,因此当我尝试在iPhone(iOS 7.0.4)上运行它时,Xcode表示有3个警告,所有这些警告都是由UIAccelerator引起的

其结果是,所有标记都位于屏幕中心,一个接一个,倾斜根本不起作用

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

这是你的电话号码。我添加了一些小功能,这样您就可以手动添加不在Google数据库中的位置,但我不认为是这些功能导致了这个问题

提前谢谢你的帮助

试试这个链接:

我正在学习一些花絮,用它来翻译一些东西

i、 e

可能成为

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

}