官方文檔告訴我們,所有标注的類必須遵守這個協定。是以可以了解,标注這個概念在邏輯屬性和視圖上是分開的。先來看下這個協定聲明了哪些方法:
<a href="http://my.oschina.net/u/2340880/blog/415441#">?</a>
1
2
3
4
5
6
7
8
9
<code>@protocol mkannotation <nsobject></code>
<code>@property (nonatomic, readonly) cllocationcoordinate2d coordinate;</code><code>//地理坐标位置</code>
<code>@optional</code>
<code>@property (nonatomic, readonly, copy) nsstring *title;</code><code>//标題</code>
<code>@property (nonatomic, readonly, copy) nsstring *subtitle;</code><code>//副标題</code>
<code>//拖動時調用</code>
<code>- (</code><code>void</code><code>)setcoordinate:(cllocationcoordinate2d)newcoordinate;</code>
<code>@end</code>
10
11
12
13
14
15
16
17
18
<code>- (</code><code>void</code><code>)viewdidload {</code>
<code> </code><code>[super viewdidload];</code>
<code> </code><code>//初始化地圖</code>
<code> </code><code>mapview =[[mkmapview alloc]initwithframe:self.view.frame];</code>
<code> </code><code>//設定代理</code>
<code> </code><code>mapview.delegate=self;</code>
<code> </code><code>//設定位置</code>
<code> </code><code>mapview.region=mkcoordinateregionmake(cllocationcoordinate2dmake(39.26, 116.3), mkcoordinatespanmake(1.8, 1));</code>
<code> </code><code>mapview.maptype=mkmaptypestandard;</code>
<code> </code><code>//初始化一個大頭針類</code>
<code> </code><code>mkpointannotation * ann = [[mkpointannotation alloc]init];</code>
<code> </code><code>//設定大頭針坐标</code>
<code> </code><code>ann.coordinate=cllocationcoordinate2dmake(39.26, 116.3);</code>
<code> </code><code>ann.title=@</code><code>"我"</code><code>;</code>
<code> </code><code>ann.subtitle=@</code><code>"看這裡"</code><code>;</code>
<code> </code><code>[mapview addannotation:ann];</code>
<code> </code><code>[self.view addsubview:mapview];</code>
<code>}</code>
效果如下:
重繪大頭針視圖,大頭針渲染時會調用地圖代理的方法,我們可以重寫這個方法進行大頭針的重繪,來更改其顔色:
<code>-(mkannotationview *)mapview:(mkmapview *)mapview viewforannotation:(id<mkannotation>)annotation{</code>
<code> </code><code>//建立一個系統大頭針對象</code>
<code> </code><code>mkpinannotationview * view = [[mkpinannotationview alloc]initwithannotation:annotation reuseidentifier:@</code><code>"pin"</code><code>];</code>
<code> </code><code>view.pincolor=mkpinannotationcolorgreen;</code><code>//設定顔色為綠色</code>
<code> </code><code>return</code> <code>view;</code>
mkannotationview是标注的視圖類,一會我們通過它來自定義我們自己的标注,先來看mkpinannotationview這個類,這個類繼承于mkannotationview,是一個大頭針視圖類。這個類根簡單,隻有一下兩個屬性:
@property (nonatomic) mkpinannotationcolor pincolor;
設定大頭針的顔色,枚舉如下:
<code>typedef</code> <code>ns_enum(nsuinteger, mkpinannotationcolor) {</code>
<code> </code><code>mkpinannotationcolorred = 0,</code><code>//紅色</code>
<code> </code><code>mkpinannotationcolorgreen,</code><code>//綠色</code>
<code> </code><code>mkpinannotationcolorpurple</code><code>//紫色</code>
<code>};</code>
@property (nonatomic) bool animatesdrop;
設定添加時是否顯示降落動畫
<code> </code><code>mkannotationview * view = [[mkannotationview alloc]initwithannotation:annotation reuseidentifier:@</code><code>"annotation"</code><code>];</code>
<code> </code><code>//設定标注的圖檔</code>
<code> </code><code>view.image=[uiimage imagenamed:@</code><code>"保溫車0.png"</code><code>];</code>
<code> </code><code>//點選顯示圖詳情視圖 必須mkpointannotation對象設定了标題和副标題</code>
<code> </code><code>view.canshowcallout=yes;</code>
<code> </code><code>//建立了兩個view</code>
<code> </code><code>uiview * view1 = [[uiview alloc]initwithframe:cgrectmake(0, 0, 50, 50)];</code>
<code> </code><code>view1.backgroundcolor=[uicolor redcolor];</code>
<code> </code><code>uiview * view2 = [[uiview alloc]initwithframe:cgrectmake(0, 0, 30, 50)];</code>
<code> </code><code>view2.backgroundcolor=[uicolor bluecolor];</code>
<code> </code><code>//設定左右輔助視圖</code>
<code> </code><code>view.leftcalloutaccessoryview=view1;</code>
<code> </code><code>view.rightcalloutaccessoryview=view2;</code>
<code> </code><code>//設定拖拽 可以通過點選不放進行拖拽</code>
<code> </code><code>view.draggable=yes;</code>
@property (nonatomic) cgpoint centeroffset;
視圖中心的偏移量
@property (nonatomic) cgpoint calloutoffset;
點選後彈出視圖的偏移量
@property (nonatomic, getter=isenabled) bool enabled;
設定是否有效
@property (nonatomic, getter=ishighlighted) bool highlighted;
是否高亮狀态
@property (nonatomic) cgpoint leftcalloutoffset;
設定左輔助視圖的偏移量
@property (nonatomic) cgpoint rightcalloutoffset;
設定右輔助視圖的偏移量