LoginSignup
2
3

More than 5 years have passed since last update.

iPhoneで方位を取得する

Posted at

iPhoneの動作検知について、少し勉強しています。
今回は、「方位」の検知に関して備忘録を残します。

やること
端末の位置情報から方位を取得し、簡単なコンパスを作ります
※ただ矢印の画像が回転するだけのサンプルです。
ライブラリは「CoreLocation」を使用します。

実装

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

@interface ViewController () <CLLocationManagerDelegate>

@property (strong, nonatomic) CLLocationManager *manager;
@property (weak, nonatomic) IBOutlet UIImageView *compass;
@property (weak, nonatomic) IBOutlet UITextField *magneticHeading;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.manager = [[CLLocationManager alloc] init];
    self.manager.delegate = self;
    self.manager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    self.manager.distanceFilter = kCLDistanceFilterNone;

    // 位置情報取得開始
    [self.manager startUpdatingLocation];
    // コンパスのアニメーション開始
    [self.manager startUpdatingHeading];
}

//コンパスの矢印を回転させる(取得するたびに走る)
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)heading {

    if (heading.headingAccuracy < 0) {
        return;
    }

    CLLocationDirection theHeading = ((heading.trueHeading > 0) ? heading.trueHeading : heading.magneticHeading);

    // 取得した方位をテキストフィールドに入力
    self.magneticHeading.text = [NSString stringWithFormat:@"%f", theHeading];

    // 取得した方位を元にイメージを回転
    self.compass.transform = CGAffineTransformMakeRotation(-heading.magneticHeading * M_PI/180);
}

@end

所感

改めてiPhoneの動作検知機能の素晴らしさに気づかされました。様々なモーションデータを数行で取得できるんですね。その他、「高度」「速度」なんかも取得できるみたいです。流行りの「顔認証」技術なども合わせて、今後も勉強を続けます。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3