こんばんは、ボーノです。
地図アプリを作ってて、今後も使う気がしたのでメモメモ。
MKMapViewでタップされた位置に地図をスライドしたい時
基本的には下記流れ。
- ジェスチャーイベントを登録
- タップを検知
- タップされた座標を取得
- その座標までアニメーションでスライド
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #import "SecondViewController.h" @interface SecondViewController () @end @implementation SecondViewController { MKMapView *mapView; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization CGRect disp = [[UIScreen mainScreen] bounds]; //mapViewの生成 mapView = [[MKMapView alloc]initWithFrame:CGRectMake(0, 0, disp.size.width, disp.size.height)]; [self.view addSubview:mapView]; mapView.delegate = self; MKCoordinateRegion region = mapView.region; region.span.latitudeDelta = 0.05; region.span.longitudeDelta = 0.05; region.center = CLLocationCoordinate2DMake(35.658517, 139.701334); [mapView setRegion:region animated:YES]; //ジェスチャーの登録 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(mapTapped:)]; [mapView addGestureRecognizer:tapGesture]; } } //タップされた時の動作 - (void)mapTapped:(UITapGestureRecognizer *)sender { CGPoint location = [sender locationInView:mapView]; CLLocationCoordinate2D mapPoint = [mapView convertPoint:location toCoordinateFromView:mapView]; //アニメーションで移動 [mapView setCenterCoordinate:mapPoint animated:YES]; } |