【问题标题】:iOS detect movement of useriOS 检测用户的移动
【发布时间】:2012-12-20 00:30:41
【问题描述】:

我想创建一个简单的应用程序,当我将手机在 Y 轴上从起点移动到终点时,它会在屏幕上绘制一条简单的线,例如从点 a(0,0) 到点 b(0 , 10) 请帮忙

演示:

【问题讨论】:

  • 你能给我你的代码吗,因为我面临同样的问题。我试过了,但它让我的应用崩溃了。
  • @user2526811,今晚我把代码发给你,发你的邮箱
  • 感谢您的回复。我的身份证是pakshay8800@gmail.com
  • 你能把代码也寄给我吗:annamalai.arun007@gmail.com

标签: objective-c ios core-motion uiaccelerometer


【解决方案1】:

您需要初始化运动管理器,然后检查motion.userAcceleration.y 值以获得适当的加速度值(以米/秒/秒为单位测量)。

在下面的示例中,我检查了 0.05,我发现这是一个相当不错的手机向前移动。我还等到用户显着放慢速度(-Y 值)再进行绘制。调整设备 MotionUpdateInterval 将决定您的应用对速度变化的响应能力。现在它以 1/60 秒采样。

motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0/60.0;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
    NSLog(@"Y value is: %f", motion.userAcceleration.y);
    if (motion.userAcceleration.y > 0.05) { 
        //a solid move forward starts 
        lineLength++; //increment a line length value
    } 
    if (motion.userAcceleration.y < -0.02 && lineLength > 10) {
        /*user has abruptly slowed indicating end of the move forward.
         * we also make sure we have more than 10 events 
         */
        [self drawLine]; /* writing drawLine method
                          * and quartz2d path code is left to the 
                          * op or others  */
        [motionManager stopDeviceMotionUpdates];
    }
}];

请注意,此代码假定手机平放或略微倾斜,并且用户在纵向模式下向前推(远离自己,或与手机一起移动)。

【讨论】:

  • 在后台不起作用。要在 Go 中跟踪用户位置,我们必须启用背景。有什么方法可以实现吗?
  • @MohammadAbdurraafay 与其在 cmets 中提问,不如通过ask a new question 获得答案、帮助等。
  • 此代码崩溃是因为 NSOperationQueue 的问题。有关设置NSOperationQueue 的正确方法,请参阅my answer here。另外,@JohnFontaine,请对您的答案进行适当的更改。
  • 这只是支持向前移动。
猜你喜欢
  • 2022-06-20
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多