2009/11/27

[Objective-C][iPhone sdk][google maps]pinを表示その3

UIViewControllerを使わなくてもピンの色を変更して表示できました。

プログラムがめちゃくちゃ長いですが、お付き合いください。

/* MapViewDelegate.h */
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MapViewDelegate : NSObject <MKMapViewDelegate>{

}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;

@end

/* MapViewDelegate.m */
@implementation MapViewDelegate

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

MKPinAnnotationView *pinannotationview = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
pinannotationview.pinColor = MKPinAnnotationColorPurple;
pinannotationview.animatesDrop = NO;
return pinannotationview;

}

@end

/* AnnotationToMap.h */
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface AnnotationToMap : NSObject <MKAnnotation>{
CLLocationCoordinate2D coordinate;
}
-(id)initWithCoordinate:(CLLocationCoordinate2D) coord;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@end

/* AnnotationToMap.m */
#import "AnnotationToMap.h"
@implementation AnnotationToMap
@synthesize coordinate;

-(id)initWithCoordinate:(CLLocationCoordinate2D) coord{
self = [super init];
coordinate = coord;
return self;
}

@end

/* MapTestAppDelegate.m */
CLLocation *location = [[CLLocation alloc] initWithLatitude:35.660262 longitude:139.729548];
CLLocationCoordinate2D mapcenter = location.coordinate;
[location release];

MKMapView *mapview = [[MKMapView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
MKCoordinateSpan CoordinateSpan = MKCoordinateSpanMake(0.005,0.005);
MKCoordinateRegion CoordinateRegion = MKCoordinateRegionMake(mapcenter,CoordinateSpan);
[mapview setRegion:CoordinateRegion animated:YES];

MapViewDelegate *mapviewdelegate = [[MapViewDelegate alloc] init];
mapview.delegate = mapviewdelegate;

AnnotationToMap *annotationtomap = [[AnnotationToMap alloc] initWithCoordinate:mapcenter];
[mapview addAnnotation:annotationtomap];
[annotationtomap release];

[window addSubview:mapview];
[mapview release];
[window makeKeyAndVisible];

で、実行結果はこのような形になりました。

Photobucket
ピンの色が変わらなかった原因として、mapviewのdelegateプロパティを設定していなかったために引き起こされたバグでした。

色々と記事を読んでみると、UIViewControllerにdelegate対象となるmapviewdelegateを継承しているのが多かったのですが、いまいち納得がいかなく、今回、あえて外だしにしてみました。

割と納得いってるのですが、どうでしょうか?

ここまできちんと書くとオープンソースとして配信したくなってしまう。
Interface Builderを使わないサンプルプログラムとしてばんばん公開しようかなーって思うのですが、時間すごく喰いそうなので、う〜〜〜ん、どうしようぉ〜〜〜。

やりたいことが多すぎるぅ。。。

参考したサイト|ブログ(多くてすみません)
MKMapView上にアノテーションを追加する
How to add a pin to embedded map
Using iPhone SDK MapKit Framework – A tutorial
iPhoneアプリで地図を取り扱う、MapKit Framework
iPhoneのGPSとMapKitを使った地図を連動させる方法CommentsAdd Star

0 コメント:

コメントを投稿