
前回の続き:
[iPhone] Map Kitで遊ぼう:地図を出して現在位置にピンを立てる
http://blog.s21g.com/articles/1596
参考:
Drawing polyines or routes on a MKMapView (as an MKAnnotationView) – Part 2
http://spitzkoff.com/craig/?p=108
###MKAnnotationを実装するクラスを作成
MyAnnotation.h
rails>>
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface MyAnnotation : NSObject
CLLocationCoordinate2D _coordinate;
}
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
-(id)initWithCoordinate:(CLLocationCoordinate2D) coordinate;
@end
<<--
MyAnnotation.m
rails>>
#import "MyAnnotation.h"
@implementation MyAnnotation
@synthesize coordinate=_coordinate;
-(id)initWithCoordinate:(CLLocationCoordinate2D) c{
_coordinate=c;
return self;
}
@end
<<--
###ViewControllerでMKMapViewDelegateを実装
ポイントとしては
- .hでMKMapViewDelegateを実装宣言
- _mapView.delegate = self;
- -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id
)annotationを実装 - MyAnnotationなら画像を設定する:
if([annotation isKindOfClass:[MyAnnotation class]]) {
annotationView.image = [UIImage imageNamed:@"some.png"];
本当はMKAnnotationViewを派生して、MyAnnotationViewを作るのがベターなんですけど省略しています。
MapTutorialViewController.h
rails>>
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MapTutorialViewController : UIViewController
MKMapView *_mapView;
}
@end
<<--
MapTutorialViewController.m
rails>>
#pragma mark MKMapViewDelegate
(MKAnnotationView *)mapView:(MKMapView )mapView viewForAnnotation:(id
)annotation{ )[_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
MKAnnotationView annotationView;
NSString identifier = @"Pin";
annotationView = (MKPinAnnotationView
if(nil == annotationView) {
annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier] autorelease];
}
if([annotation isKindOfClass:[MyAnnotation class]]) {
annotationView.image = [UIImage imageNamed:@"some.png"]; //地図に表示したい画像を設定
}
return annotationView;
}(void)addSomeAnnotations {
//a location
double latitude = 37.331688999999997;
double longitude = -122.030731;
CLLocationCoordinate2D _location;
_location.latitude = latitude;
_location.longitude = longitude;CLLocationCoordinate2D location1;
MyAnnotation *annotation;location1.latitude = _location.latitude+0.1;
location1.longitude = _location.longitude+0.1;
annotation =[[MyAnnotation alloc] initWithCoordinate:location1];
[_mapView addAnnotation:annotation];location1.latitude = _location.latitude+0.5;
location1.longitude = _location.longitude+0.5;
annotation =[[MyAnnotation alloc] initWithCoordinate:location1];
[_mapView addAnnotation:annotation];
}
(void)viewDidLoad {
[super viewDidLoad];_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
_mapView.showsUserLocation=TRUE;
_mapView.delegate = self;
[self.view addSubview:_mapView];[self addSomeAnnotations];
}
<<--