104 自定義大頭針

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;
}
發佈了124 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章