Как реализовать CMStepCounter CoreMotion - M7 Chip

Мне было интересно, если кто-нибудь может показать мне пример того, как реализовать CMStepCounter. (Я посмотрел на документацию, но все еще немного запутался в том, как это сделать).

Я пытаюсь обновлять UILabel на моем View каждый раз, когда делается какой-то шаг. Я также хочу, чтобы приложение продолжало считать шаги, когда оно закрыто.

Я относительно новичок в iOS, любая помощь будет принята с благодарностью:)!

Спасибо Райан

1 ответ

Решение

Вы должны реализовать это следующим образом

#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *stepsCountingLabel;  // Connect this outlet to your's label in xib file.
@property (nonatomic, strong) CMStepCounter *cmStepCounter;
@property (nonatomic, strong) NSOperationQueue *operationQueue;

@end

@implementation ViewController

- (NSOperationQueue *)operationQueue
{
    if (_operationQueue == nil)
    {
        _operationQueue = [NSOperationQueue new];
    }
    return _operationQueue;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    if ([CMStepCounter isStepCountingAvailable])
    {
        self.cmStepCounter = [[CMStepCounter alloc] init];
        [self.cmStepCounter startStepCountingUpdatesToQueue:self.operationQueue updateOn:1 withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error) 
         {
            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                [self updateStepCounterLabelWithStepCounter:numberOfSteps];
            }];
        }];
    }
}

- (void)updateStepCounterLabelWithStepCounter:(NSInteger)countedSteps 
{
    self.stepsCountingLabel.text = [NSString stringWithFormat:@"%ld", (long)countedSteps];
}

@end

Однако обратите внимание, что иногда блок startStepCountingUpdatesToQueue задерживает обновление numberOfSteps.

Другие вопросы по тегам