1

この質問は CMCalibratedMagneticField が更新 されない前に尋ねられましたが、実際には答えられませんでした。私はこれに非常に迷っています。

簡単な定式化を使用していますが、field.field.x、y、z は常にゼロです。

if (motionManager.deviceMotionAvailable)
{
    [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]  
                                       withHandler:
       ^(CMDeviceMotion *motionData, NSError *error) {
           CMCalibratedMagneticField field = motionData.magneticField;
           NSLog(@"x: %f  y:%f  z:%f", field.field.x
                                     , field.field.y
                                     , field.field.z);

    }];       
}

サンプル出力は

2013-07-14 22:18:27.865 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

2013-07-14 22:18:27.869 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

2013-07-14 22:18:27.879 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

前の回答が示唆しているように、問題は電話ではないと確信しています。私はかなり最新の4S用にコーディングしています。CoreMotion、CoreLocation、および CoreData フレームワークが配置されています。おそらく、実装にインポートする必要があることを知らないヘッダー ファイルがありますか? 現在、私は必要なようです

#import <tgmath.h>

しかし、それは他のもののためです。

どんな助けでも大歓迎です!

ティム・レッドフィールド

4

1 に答える 1

2

代わりにこれを試してください:

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame 
                                            toQueue:(NSOperationQueue *)queue 
                                        withHandler:(CMDeviceMotionHandler)handler

次のいずれかで:

     CMAttitudeReferenceFrameXArbitraryCorrectedZVertical  
     CMAttitudeReferenceFrameXMagneticNorthZVertical  
     CMAttitudeReferenceFrameXTrueNorthZVertical  

だがしかし:

     CMAttitudeReferenceFrameXArbitraryZVertical

(あなたが見逃した別の SO の質問: CoreMotion - MagneticField is always 0 )

磁力計データに関する情報が多すぎる場合は、次の質問に対する私の回答を参照してください。iOS では、Core Location フレームワークと Core Motion フレームワークの磁場値の違いは何ですか?

于 2013-07-15T01:02:25.617 に答える