「ロギングアプリの作り方」を参考にして作ってみた

Via:ロギングアプリの作り方 (1) – Core Locationで現在地を取得する
Via:ロギングアプリの作り方 (2) – Map Kitで地図を表示する
Via:ロギングアプリの作り方 (3) – アノテーションビューをカスタマイズする


SingleViewで新規作成。「SpotLog」で作成。

「Mapkit.freamwork」「CoreLocation.framework」を追加。

Storyboardにテキストフィールドとボタンを追加。

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];

ビルドして


ログに緯度、経度、メッセージ、日付が表示される。


StoryboardでMapViewを追加。

アノテーションクラスを作成してピンを表示させる。
「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。

=おわり=

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)