アプリを開発する
1. 新規プロジェクトの作成
XCodeを起動して、メニューから[File]-[New]-[Project]を選択し、新規プロジェクトを立ち上げます。
アプリケーションのタイプは、今回は「SingleViewApplication」を選択します。
今回は、プロジェクト名はConvinienceRouteとします。メモリ管理を厳格に行うため「AutomaticReferenceCounting」のチェックを外してプロジェクトを作成してください。
新規プロジェクトを作成すると、デフォルトでいくつかのファイルが生成されます。そのうちの「ViewController.xib」は、今回は使わないので削除します。同時に、AppDelegate.mのコードを書き換えます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; //コメントアウトする self.viewController = [[ViewController alloc] init]; //追記 self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }
2. 現在地周辺の地図を表示する
まずは、現在地を取得し、現在地周辺の地図を表示させてみたいと思います。
デフォルトで作成されているViewController.h に、YMapKit.frameworkとCoreLocation,frameworkのヘッダーファイルをインポートし、YMKMapViewのイベント取得のためのYMKMapViewDelegateプロトコルを設定し、現在地を取得するためにCLLocationManagerDelegateプロトコルを設定します。
ユーザの位置情報は、メソッド間で使いまわすので、インスタンス変数として設定します。
#import <UIKit/UIKit.h> #import <YMapKit/YMapKit.h> // iOS Map SDKを読み込む #import <CoreLocation/CoreLocation.h> // CoreLocationを読み込む @interface ViewController : UIViewController<YMKMapViewDelegate, CLLocationManagerDelegate> { YMKMapView *map; //YMKMapViewインスタンス用ポインタ CLLocationManager *locationMgr; //ロケーションマネージャ CLLocationCoordinate2D userLocation; //ユーザの位置(緯度経度) } @end
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)dealloc { // インスタンス変数を開放する [map release]; [locationMgr release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; CGFloat width = self.view.frame.size.width; CGFloat height = self.view.frame.size.height; //YMKMapViewのインスタンスを作成 map = [[YMKMapView alloc] initWithFrame:CGRectMake(0, 0, width, height) appid:@"<あなたのアプリケーションID> " ]; //地図のタイプを指定 標準の地図を指定 map.mapType = YMKMapTypeStandard; map.zoomEnabled = YES; //YMKMapViewを追加 [self.view addSubview:map]; //YMKMapViewDelegateを登録 map.delegate = self; // ロケーションマネージャを作成 locationMgr = [[CLLocationManager alloc] init]; locationMgr.delegate = self; // 現在位置取得 [locationMgr startUpdatingLocation]; } // 現在位置取得完了 -(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { userLocation = newLocation.coordinate; // シミュレータでは現在位置を取得できないので、開発用にデフォルトの値を設定しておく userLocation.latitude = 35.6657214; userLocation.longitude = 139.7310058; // 地図の中心位置・縮尺を設定 map.region = YMKCoordinateRegionMake(userLocation, YMKCoordinateSpanMake(0.005, 0.005)); // 測位を終了させる [locationMgr stopUpdatingLocation]; }
これで、シミュレータを実行してみてください。指定した緯度経度周辺の地図が表示されたでしょうか。
地図を表示させる手順は、下記のチュートリアルにも解説がありますので、こちらも参照してください。