1.每次添加一個大頭針系統會調用mapview的以下代理方法:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
//如果返回nil,就相當於沒有任何處理,系統會按照原有的方式進行顯示
一開始定位到了之後會顯示一個藍色發光的大頭針,這個大頭針模型是系統的
if (![annotation isKindOfClass:[HMAnnotation class]]) {
//如果是系統的不做處理
return nil;
}
}
2.默認情況下MKAnnotationView是無法顯示的(設置image才能顯示), 如果想自定義大頭針可以使用MKAnnotationView的子類MKPinAnnotationView
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *identifier = @"anno";
MKPinAnnotationView *annoView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annoView == nil) {
annoView = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:identifier];
// 設置大頭針的顏色
annoView.pinColor = MKPinAnnotationColorPurple;
// 設置大頭針從天而降
annoView.animatesDrop = YES;
// 設置大頭針標題是否顯示,默認不顯示
annoView.canShowCallout = YES;
// 設置大頭針標題顯示的偏移位
annoView.calloutOffset = CGPointMake(-50, 0);
// 設置大頭針左邊的輔助視圖
annoView.leftCalloutAccessoryView = [[UISwitch alloc] init];
// 設置大頭針右邊的輔助視圖
annoView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
}
// 注意: 如果你是使用的MKPinAnnotationView創建的自定義大頭針, 那麼設置圖片無效,
//因爲系統內部會做一些操作, 覆蓋掉我們自己的設置,這個時候只能使用父類MKAnnotationView
// 3.給大頭針View設置數據
annoView.annotation = annotation;
// 4.返回大頭針View
return annoView;
}
3.MKAnnotationView設置自定義的圖片:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *identifier = @"anno";
MKAnnotationView *annoView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annoView == nil) {
annoView = [[MKAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:identifier];
// 設置大頭針標題是否顯示,默認不顯示
annoView.canShowCallout = YES;
// 設置大頭針標題顯示的偏移位
annoView.calloutOffset = CGPointMake(-50, 0);
// 設置大頭針左邊的輔助視圖
annoView.leftCalloutAccessoryView = [[UISwitch alloc] init];
// 設置大頭針右邊的輔助視圖
annoView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
}
// 注意: 如果你是使用的MKPinAnnotationView創建的自定義大頭針, 那麼設置圖片無效,
//因爲系統內部會做一些操作, 覆蓋掉我們自己的設置,這個時候只能使用父類MKAnnotationView
annoView.image = [UIImage imageNamed:@"123"];
// 3.給大頭針View設置數據
annoView.annotation = annotation;
// 4.返回大頭針View
return annoView;
}