在上一篇博客中http://my.oschina.net/u/2340880/blog/415360系統總結了iOS原生地圖框架MapKit中主體地圖的設置與應用。這篇是上一篇的一個後續,總結了系統的大頭針視圖以及自定義標註視圖的方法。框架
官方文檔告訴咱們,全部標註的類必須遵照這個協議。因此能夠了解,標註這個概念在邏輯屬性和視圖上是分開的。先來看下這個協議聲明瞭哪些方法:動畫
@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
- (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
設置添加時是否顯示降落動畫繼承
-(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; }
效果以下:
@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