Как реализовать CMStepCounter CoreMotion — чип M7

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

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

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

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


person Ryan    schedule 05.01.2014    source источник


Ответы (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.

person ldindu    schedule 05.01.2014
comment
Спасибо, однако я заметил, что приложение, похоже, не обновляет количество шагов, которые были предприняты, когда приложение закрыто / телефон заблокирован. Есть ли способ сделать это ? Спасибо еще раз. - person Ryan; 06.01.2014
comment
Вы указали обязательные фоновые режимы в файле plist вашего приложения? - person ldindu; 06.01.2014
comment
Нет, я нашел список, но не уверен, какой выбрать :) Спасибо, - person Ryan; 06.01.2014
comment
Основываясь на документации Apple, которую я прочитал о CMStepCounter, в ней ничего не упоминается о том, что вы можете использовать CMStepCounter в фоновом режиме. - person ldindu; 07.01.2014
comment
Достаточно честно, мне интересно, как другие приложения делают это, как Шагомер ++. Интересно, запрашивают ли они какие-либо обновления, когда приложение снова открывается. (– queryStepCountStartingFrom:to:toQueue:withHandler:). Вы знаете, как это работает? Спасибо за вашу помощь далеко :) - person Ryan; 07.01.2014