Via:ロギングアプリの作り方 (1) – Core Locationで現在地を取得する
Via:ロギングアプリの作り方 (2) – Map Kitで地図を表示する
Via:ロギングアプリの作り方 (3) – アノテーションビューをカスタマイズする
「Mapkit.freamwork」「CoreLocation.framework」を追加。
ViewContrller.hにimportとOutletを追加
ViewContrller.mに位置情報の設定を参考サイトを見ながら追加
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // ロケーションマネージャを作成 clm = [[CLLocationManager alloc] init]; clm.delegate = self; // 現在地の更新を開始 [clm startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { }
- (IBAction)logBtn:(id)sender { // ログを取得 NSString *log; log = logField.text; if ([log length] == 0) { return; } // ログを追加 NSDictionary *_logs = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithDouble:location.coordinate.latitude], @"latitude", [NSNumber numberWithDouble:location.coordinate.longitude], @"longitute", [NSDate date], @"date", log, @"log", nil]; NSLog(@"_logs:%@",_logs); // ログを保存 /* NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"dictionarydata.plist"]; [_logs writeToFile:dataPath atomically:YES]; */ // キーボードを隠す [logField resignFirstResponder]; }
ボタンからの位置情報がどうも?なので、保存用変数で取り回しをします。
_longitude、_latitudeを追加して取回します。
ViewController.hを変更
#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> @interface ViewController : UIViewController <CLLocationManagerDelegate> { CLLocationManager *clm; // 現在位置記録用 CLLocationDegrees _longitude; CLLocationDegrees _latitude; } @property (weak, nonatomic) IBOutlet UITextField *logField; - (IBAction)logBtn:(id)sender; @end
ViewCintroller.mを変更
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { // 位置情報更新 _longitude = newLocation.coordinate.longitude; _latitude = newLocation.coordinate.latitude; }
NSDictionary *_logs = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithDouble:_latitude], @"latitude", [NSNumber numberWithDouble:_longitude], @"longitude", [NSDate date], @"date", log, @"log", nil];
ビルドして
ログに緯度、経度、メッセージ、日付が表示される。
アノテーションクラスを作成してピンを表示させる。
「NewFile」でObject-C形式で作成
「SpotLogAnnotation」で「NSObject」のサブクラスで作成します。
SpotLogAnnotation.hを開き参考サイトと同じように追加
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface SpotLogAnnotation : NSObject <MKAnnotation> { NSDictionary *_logDict; } @property(nonatomic, retain) NSDictionary *logDict; @end
SpotLogAnnotation.mを開き参考サイトと同じように追加
#import "SpotLogAnnotation.h" @implementation SpotLogAnnotation @synthesize logDict = _logDict; - (CLLocationCoordinate2D)coordinate { // 座標を取得 CLLocationCoordinate2D coordinate; coordinate.latitude = [[_logDict objectForKey:@"latitude"] doubleValue]; coordinate.longitude = [[_logDict objectForKey:@"longitude"] doubleValue]; return coordinate; } - (NSString *)title { // ログテキストを取得 return [_logDict objectForKey:@"log"]; } @end
ViewController.hのSpotLogAnnotatin.hを追加
#import "SpotLogAnnotation.h"
ViewController.mにアノテーション表示を追加。
- (void)showLog:(NSDictionary *)logDict { // アノテーションを作成 SpotLogAnnotation *annotation; annotation = [[SpotLogAnnotation alloc] init]; annotation.logDict = logDict; // アノテーションを追加 [mapview addAnnotation:annotation]; }
- (IBAction)logBtn:(id)sender {
の一番下に
// アノテーション [self showLog:_logs];
を追加して表示を見てみる
こんな感じに入力したテキストが表示されれば一応OK。
=おわり=
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)