MapView設置自定義大頭針視圖(Obj-C)

子類(MKPinAnnotationView) 默認視圖就是大頭針樣式(棒棒糖)
如果要自定義圖像,需要使用父類,不能使用MKPinAnnotationView

演示代碼:

/**
 *  當設置大頭針視圖的時候大頭針模型時調用
 *
 *  @param mapView    地圖視圖
 *  @param annotation 大頭針模型
 *
 *  @return 大頭針視圖
 */
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    
    static NSString *identifier = @"annotation";
    
    // 排除定位大頭針(否則定位大頭針樣式也會被修改掉)
    if ([annotation isKindOfClass:[MKUserLocation class]]) {
        return nil;
    }
    
    // 設置顏色需要使用MKAnnotationView的子類才行  MKPinAnnotationView
    MKAnnotationView *anno = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    
    if (anno == nil) {
        anno = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier];
    }
    // 設置屬性 (父類(MKAnnotationView)沒有動畫滑落和pinTintColor屬性)
    
    // 設置顯示標注
    anno.canShowCallout = YES;

    /*
        MKPinAnnotationView 默認視圖就是大頭針樣式(棒棒糖)
        如果要自定義圖像,需要使用父類,不能使用MKPinAnnotationView
     */
    anno.image = [UIImage imageNamed:@"自拍照"];

    
    return anno;
    
}
annotation.png

這樣設置后,不會有動畫滑落效果,設置動畫滑落效果,需要在另外一個代理方法中設置

演示代碼:

/**
 *  已經添加大頭針視圖后調用(還沒顯示時)
 *
 *  @param mapView 地圖視圖
 *  @param views   所有添加的大頭針視圖
 */
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray<MKAnnotationView *> *)views{
    
    // 遍歷每一個大頭針視圖
    for (MKAnnotationView *anno in views) {
        
        // 排除定位大頭針(否則定位大頭針樣式也會被修改掉)
        if ([anno isKindOfClass:[MKUserLocation class]]) {
            return ;
        }
        
        // 記錄目標位置
        CGRect targetAnno = anno.frame;
        
        // 改大頭針視圖Y坐標(模擬動態滑落)
        anno.frame = CGRectMake(targetAnno.origin.x,0,targetAnno.size.width,targetAnno.size.height);
        
        // 動畫移動位置到目標位置
        [UIView animateWithDuration:0.5 animations:^{
           
            anno.frame = targetAnno;
            
        }];
        
    }
    
    
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容