iOS原生地圖開發指南續——大頭針與自定義標註

iOS原生地圖開發指南續——大頭針與自定義標註

在上一篇博客中http://my.oschina.net/u/2340880/blog/415360系統總結了iOS原生地圖框架MapKit中主體地圖的設置與應用。這篇是上一篇的一個後續,總結了系統的大頭針視圖以及自定義標註視圖的方法。框架

1、先來認識一個協議MKAnnotation

官方文檔告訴咱們,全部標註的類必須遵照這個協議。因此能夠了解,標註這個概念在邏輯屬性和視圖上是分開的。先來看下這個協議聲明瞭哪些方法:動畫

@protocol MKAnnotation <NSObject>
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;//地理座標位置
@optional
@property (nonatomic, readonly, copy) NSString *title;//標題
@property (nonatomic, readonly, copy) NSString *subtitle;//副標題
//拖動時調用
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate;

@end

 

2、建立一個系統標註大頭針

- (void)viewDidLoad {
    [super viewDidLoad];
    //初始化地圖
    mapView =[[MKMapView alloc]initWithFrame:self.view.frame];
    //設置代理
    mapView.delegate=self;
    //設置位置
    mapView.region=MKCoordinateRegionMake(CLLocationCoordinate2DMake(39.26, 116.3), MKCoordinateSpanMake(1.8, 1));
    mapView.mapType=MKMapTypeStandard;
    //初始化一個大頭針類
    MKPointAnnotation * ann = [[MKPointAnnotation alloc]init];
    //設置大頭針座標
    ann.coordinate=CLLocationCoordinate2DMake(39.26, 116.3);
    ann.title=@"我";
    ann.subtitle=@"看這裏";
    [mapView addAnnotation:ann];
    [self.view addSubview:mapView];
}

 

效果以下:
atom

重繪大頭針視圖,大頭針渲染時會調用地圖代理的方法,咱們能夠重寫這個方法進行大頭針的重繪,來更改其顏色:spa

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    //建立一個系統大頭針對象
    MKPinAnnotationView * view = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"pin"];
    view.pinColor=MKPinAnnotationColorGreen;//設置顏色爲綠色
    return view;
}

 

效果以下:.net

MKAnnotationView是標註的視圖類,一會咱們經過它來自定義咱們本身的標註,先來看MKPinAnnotationView這個類,這個類繼承於MKAnnotationView,是一個大頭針視圖類。這個類根簡單,只有一下兩個屬性:代理

@property (nonatomic) MKPinAnnotationColor pinColor;code

設置大頭針的顏色,枚舉以下:對象

typedef NS_ENUM(NSUInteger, MKPinAnnotationColor) {
    MKPinAnnotationColorRed = 0,//紅色
    MKPinAnnotationColorGreen,//綠色
    MKPinAnnotationColorPurple//紫色
};

 

@property (nonatomic) BOOL animatesDrop;blog

設置添加時是否顯示降落動畫繼承

3、自定義標註視圖

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    MKAnnotationView * view = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"annotation"];
    //設置標註的圖片
    view.image=[UIImage imageNamed:@"保溫車0.png"];
    //點擊顯示圖詳情視圖 必須MKPointAnnotation對象設置了標題和副標題
    view.canShowCallout=YES;
    //建立了兩個view
    UIView * view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
    view1.backgroundColor=[UIColor redColor];
    UIView * view2 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 30, 50)];
    view2.backgroundColor=[UIColor blueColor];
    //設置左右輔助視圖
    view.leftCalloutAccessoryView=view1;
    view.rightCalloutAccessoryView=view2;
    //設置拖拽 能夠經過點擊不放進行拖拽
    view.draggable=YES;
    return view;
}

 

效果以下:

4、標註視圖類MKAnnotationView的其餘經常使用屬性解讀

@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;

設置右輔助視圖的偏移量

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索