2013-01-09 75 views
0

我想通過MotionGraphs將加速度計或傳感器值保存到文件文本。 當deviceMotion被激活時,它被用於下一代碼:修改MotionGraphs示例代碼

if ([mManager isDeviceMotionAvailable] == YES) { 

    [mManager setDeviceMotionUpdateInterval:updateInterval]; 

    [mManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *deviceMotion, NSError *error) { 

     // attitude 

     [[weakSelf.graphViews objectAtIndex:kDeviceMotionGraphTypeAttitude] addX:deviceMotion.attitude.roll y:deviceMotion.attitude.pitch z:deviceMotion.attitude.yaw]; 

     //rotationRate 

     [[weakSelf.graphViews objectAtIndex:kDeviceMotionGraphTypeRotationRate] addX:deviceMotion.rotationRate.x y:deviceMotion.rotationRate.y z:deviceMotion.rotationRate.z]; 

     // gravity 

     [[weakSelf.graphViews objectAtIndex:kDeviceMotionGraphTypeGravity] addX:deviceMotion.gravity.x y:deviceMotion.gravity.y z:deviceMotion.gravity.z]; 

     // userAcceleration 

     [[weakSelf.graphViews objectAtIndex:kDeviceMotionGraphTypeUserAcceleration] addX:deviceMotion.userAcceleration.x y:deviceMotion.userAcceleration.y z:deviceMotion.userAcceleration.z]; 

我認爲正在使用一個隊列,我想介紹一個實現從這個隊列保存到FILETEXT。

怎麼可能?

回答

1

你這樣的代碼:

NSMutableArray *sensorData; 
//[sensorData removeAllObjects]; 

if ([mManager isDeviceMotionAvailable] == YES) { 
    [mManager setDeviceMotionUpdateInterval:updateInterval]; 
    [mManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *deviceMotion, NSError *error) { 
     NSString *strSensorData = [NSString stringWithFormat:@"%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f", deviceMotion.timestamp, deviceMotion.attitude.roll, deviceMotion.attitude.pitch, deviceMotion.attitude.yaw, deviceMotion.rotationRate.x, deviceMotion.rotationRate.y, deviceMotion.rotationRate.z, deviceMotion.gravity.x, deviceMotion.gravity.y, deviceMotion.gravity.z, deviceMotion.userAcceleration.x, deviceMotion.userAcceleration.y, deviceMotion.userAcceleration.z]; 
     [sensorData addObject:strSensorData]; 
     //... 
} 

- (void)stopUpdates 
{ 
    CMMotionManager *mManager = [(APLAppDelegate *)[[UIApplication sharedApplication] delegate] sharedManager]; 

    if ([mManager isDeviceMotionActive] == YES) { 
     [mManager stopDeviceMotionUpdates]; 
    } 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docDir = [paths objectAtIndex: 0]; 
    NSString *docFile = [docDir stringByAppendingPathComponent: @"sensordata.txt"]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    if (![fileManager fileExistsAtPath:docDir]) 
     [fileManager createFileAtPath:docDir 
          contents:nil 
          attributes:nil]; 
    //[sensorData writeToFile:docFile atomically:YES]; 
    [sensorData.description writeToFile:docFile atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
} 

希望這有助於!