[轉載]iphone開發-地圖註解(地圖上的大頭針

[轉載]iphone開發-地圖註解(地圖上的大頭針)

 (2012-05-10 14:42:13)
標籤: 

轉載

分類: ios開發
iphone開發小筆記:iphone開發-地圖註解(地圖上的大頭針)


Cocoa Touch 沒有提供地圖註解類,只定義了一個 MKAnnotation 協議。要創建地圖註解,必須設計符合 MKAnnotation 協議的類,該類需要一個 CLLocationCoordinate2D coordinate 屬性,以及 title 和 subtitle 實例方法,


一. 設計註解類:

例,註解(大頭針)類:

.h

#import <MapKit/MapKit.h>


@interface LocationObject : NSObject <MKAnnotation> {

CLLocationCoordinate2D coordinate;

NSString *_titleString; //title

NSString *_subTitleString;

float _latitude; // 經度值

float _longitude; //緯度值

}


@property (nonatomicreadonly) CLLocationCoordinate2D coordinate;

@property float _latitude; // 經度值

@property float _longitude; //緯度值

@property (nonatomiccopy) NSString *_titleString; //title

@property (nonatomiccopy) NSString *_subTitleString;


- (id) initWithTitle:(NSString *)atitle latitue:(float)alatitude longitude:(float)alongitude;


@end

---------------------

.m

@implementation LocationObject

@synthesize coordinate,_latitude,_longitude,_titleString,_subTitleString;


- (id) initWithTitle:(NSString *)atitle latitue:(float)alatitude longitude:(float)alongitude

{

if(self=[super init])

{

self._titleString = atitle;

self._latitude = alatitude;

self._longitude = alongitude;

}

return self;

}


- (CLLocationCoordinate2D)coordinate;

{

    CLLocationCoordinate2D currentCoordinate;

currentCoordinate.latitude = self._latitude ;

    currentCoordinate.longitude = self._longitude;

    return currentCoordinate; 

}


// required if you set the MKPinAnnotationView's "canShowCallout" property to YES

- (NSString *)title

{

return self._titleString;

}

// optional

- (NSString *)subtitle

{

    return _subTitleString;

}


- (void)dealloc

{

[_titleString release];

[_subTitleString release];

    [super dealloc];

}


@end


二、創建、添加和刪除註解

1、創建註解:

LocationObject *aLocationObject = [[LocationObject alloc]initWithTitle:nameString latitue:[latitudeString floatValuelongitude:[longitudeString floatValue]];

aLocationObject._subTitleString = addressString;


2、添加註解:

先構建一個註解數組 NSMutableArray *_mapAnnotations;

然後 

[self._mapAnnotations addObject:aLocationObject];

[self._mapView addAnnotations:self._mapAnnotations];


3、刪除註解:

刪除註解可執行 removeAnnotation:一次只刪除一個註解,或者執行 removeAnnotation:刪除一個數組中的所有項。

如果需要使地圖視圖回到無註解狀態,可執行:

[self._mapView removeAnnotations:self._mapView.annotations];

刪除其中全部註解,MKMapView  annotations 屬性獲取了所有註解的數組,然後從地圖上全部刪除。


三、註解視圖 

註解對象並非視圖,是描述註解的抽象類。註解視圖是屬於 MKAnnotationView 的子類 MKPinAnnotationView,當地圖通過 addAnnotation:或 addAnnotations:添加了註解後,MKMapViewDelegate 協議的委託方法 - (void)mapView:(MKMapView *)mapViewdidAddAnnotationViews:(NSArray *)views 就會通知委託,可以在此回調方法裏設置註解視圖,如設置大頭針顏色、添加附屬按鈕等,例:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views

{

// Initialize each view

for (MKPinAnnotationView *mkaview in views)

{

// 當前位置 的大頭針設爲紫色,並且沒有右邊的附屬按鈕

if ([mkaview.annotation.title isEqualToString:@"當前位置"]) 

{

mkaview.pinColor = MKPinAnnotationColorPurple;

mkaview.rightCalloutAccessoryView = nil;

continue;

}

 

// 其他位置的大頭針設爲紅色,右邊添加附屬按鈕

mkaview.pinColor = MKPinAnnotationColorRed;

UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

mkaview.rightCalloutAccessoryView = button;

}

}


四、註解視圖 MKPinAnnotationView 的幾個屬性說明


newAnnotation.animatesDrop = YES;  // 大頭針掉落的動畫開啓,NO-關閉


newAnnotation.canShowCallout=YES;  // 控制輕擊按鈕是否生成一個註解視圖,默認爲Yes-開啓


newAnnotation.pinColor    // 設置大頭針顏色,一共有三種顏色:紅色(MKPinAnnotationColorRed),綠色(MKPinAnnotationColorGreen),紫色(MKPinAnnotationColorPurple



五、自動顯示註解視圖(Callout)

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

{

。。。。。。

///// 自動顯示 Callout

_myAnnotation = annotation;

[self performSelector:@selector(showCallout) withObject:selfafterDelay:0.1];

 

  return newAnnotation;

}


- (void)showCallout {

    [self._mapView selectAnnotation:_myAnnotation animated:YES]; 

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章