9

携帯電話を始点から終点まで、たとえば点 a(0,0) から点 b(0, 10) まで Y 軸上で移動すると、画面上に単純な線を描画する単純なアプリを作成したいと考えています。助けてください

デモ :

ここに画像の説明を入力

4

1 に答える 1

14

モーションマネージャを初期化してから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];
    }
}];

このコードは、スマートフォンが平らに置かれているか、わずかに傾いていて、ユーザーがポートレート モードで前方に押している (自分から離れている、またはスマートフォンを持って移動している) ことを前提としていることに注意してください。

于 2013-01-24T04:38:55.680 に答える