iOSは歩数計機能を実現

2754 ワード

現在、ますます多くの人が運動と健康に関心を持っており、iOSシステムも早くから健康アプリを持っています.以下、私たちの開発で、どのように歩数計機能を実現するかを詳しく説明します.まず、必要なシステムフレームワーク:Core Motionについて説明します.
Core Motionフレームワークは、歩数、ビル登り、移動タイプ(歩行、騎行など)など、予め設定されたmotion動作をサポートしています.
Core Motionフレームワークを利用すれば、デバイスから直接必要なデータを読み取ることができます.motion動作を取得するにはiOSシステムのバージョンと使用するデバイスプロセッサと関係があるため、QQ健康はiOS 8以上のシステムしかサポートされていません.ここではiOS 8以上のシステムの実現について説明します.

CMPedometer


iOS 8およびそれ以上のシステムでは、CMPedometerクラスを使用して、歩行に関する情報(ステップ数、距離、上階、下階、現在の速度など)を取得できます.
現在のデバイスがステップ数+(BOOL)isStepCountingAvailableを取得できるかどうか.
現在のデバイスが距離+(BOOL)isDistanceAvailableを取得できるかどうか.
現在の設備は上下階層数+(BOOL)isFloorCountingAvailableを取得できるかどうか.
現在のデバイスが速度(s/m)+(BOOL)isPaceAvailableを取得できるかどうか
現在のデバイスがリズム+(BOOL)isCadenceAvailableを取得できるかどうか
開始時間と終了時間に基づいて歩行に関する情報を照会する-(void)q u r y PedometerDataFromDate:(NSDate*)start toDate:(NSDate*)end withHandler:(CMPedometerHandler)handler;
ある時点からステップ数の変化を監視する-(void)startPedometerUpdatesFromDate:(NSDate*)start withHandler:(CMPedometerHandler)handler;
ステップ変化のモニタリング停止-(void)stopPedometerUpdates;
APIを理解した後、具体的な使用を見てみましょう.Viewに2つのlableを作成し、今日の歩行数を表示します.
UILabel *textLable = [[UILabel alloc]initWithFrame:CGRectMake(50, 140, 200, 44)];
textLable.backgroundColor = [UIColor lightGrayColor];
[textLable setText:@" "];
[self.view addSubview:textLable];
_stepsLable = [[UILabel alloc]initWithFrame:CGRectMake(50, 200, 100, 44)];
_stepsLable.backgroundColor = [UIColor orangeColor];
[self.view addSubview:_stepsLable];

取得したステップ数をメモリに格納し、NSUserDefaultsの単一例を使用して格納する必要があります.単一例に対応するデータが格納されていない場合は、lableの表示をゼロにします.
// 
if ([CMPedometer isStepCountingAvailable]) {
        
        self.stepCounter = [[CMPedometer alloc]init];
        
        NSDate *toDate = [NSDate date];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate *fromDate =
        [dateFormatter dateFromString:[dateFormatter stringFromDate:toDate]];
        
        [self.stepCounter startPedometerUpdatesFromDate:fromDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
            
            NSLog(@"numberOfSteps%@",pedometerData.numberOfSteps);
            [[NSUserDefaults standardUserDefaults]setObject:pedometerData.numberOfSteps forKey:@"pedometerSteps"];
           
           if(!pedometerData.numberOfSteps) {

                _stepsLable.text = @"0";
            }else
            {
                _stepsLable.text = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"pedometerSteps"]];
            }
            
        }];
    }