美文网首页
百度地图开发小记

百度地图开发小记

作者: Saylor_Lone | 来源:发表于2017-10-23 10:41 被阅读35次

    在开发中两个注意的地方:

    1.PointAnnotation 如果不设置title的话,是不会触发代理方法(选中、未选中)的。

    -(void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view
    - (void)mapView:(BMKMapView *)mapView didDeselectAnnotationView:(BMKAnnotationView *)view

    可以将title 设置为 @" " (注意是空格),解决代理方法的触发问题。
    如果在触发方法的时候不希望弹出气泡,那么可以在下面的代理方法中设置。

    if ([annotation isKindOfClass:[CustomPointAnnotation class]]) {
            CustomAnonotationView *newAnnotationView = [CustomAnonotationView annotationViewWithMap:mapView withAnnotation:annotation];
            newAnnotationView.canShowCallout = NO;//不弹出气泡
            if (((CustomPointAnnotation *)annotation).isUserAnnotation) {
                //用户位置
                newAnnotationView.image = [UIImage imageNamed:@"annotation_me"];
                newAnnotationView.enabled = NO;//标注的点击事件被禁用
            }else{
                newAnnotationView.image = [UIImage imageNamed:@"annotation_xx"];
            }
            return newAnnotationView;
        }
        return nil;
    }
    newAnnotationView.canShowCallout = NO;//不弹出气泡
    
    2.在做标注的选中与反选时,要注意以下几个地图的事件会默认触发反选方法。

    - (void)mapView:(BMKMapView *)mapView didDeselectAnnotationView:(BMKAnnotationView *)view

    点中覆盖物
    点中底图标注
    点中底图空白处
    双击地图

    这个解决要看需求(具体思路就是开关)
    a. 如果希望上述事件不影响标注的选中与反选,那么可以弃用反选方法didDeselectAnnotationView,自行记录标注的选中状态并控制。如(记录上一个选中的标注)
    b. 如果希望某个事件能够执行,做一个事件记录开关,在方法中过滤掉。


    自定义标注:

    PointAnnotation
    //.h
    #import <BaiduMapAPI_Map/BMKPointAnnotation.h>
    #import "customInfo.h"
    
    @interface LSJPointAnnotation : BMKPointAnnotation
    
    @property (nonatomic, weak) id<BMKAnnotation> delegate;
    //区分 坐标 (用户坐标、其它坐标)
    @property (nonatomic, assign) BOOL isUserAnnotation; 
    @property (nonatomic, assign) int intIndex;
    
    @end
    
    //.m 
    #import "CustomPointAnnotation.h"
    
    @implementation CustomPointAnnotation
    
    @end
    
    
    
    AnnotationView
    //.h
    #import <BaiduMapAPI_Map/BMKMapView.h>
    
    @interface CustomAnonotationView : BMKAnnotationView
    
    + (instancetype)annotationViewWithMap:(BMKMapView *)mapView withAnnotation:(id <BMKAnnotation>)annotation;
    
    @end
    
    //.m
    #import "CustomAnonotationView.h"
    #import <BaiduMapAPI_Map/BMKPointAnnotation.h>
    #import "CustomPointAnnotation.h"
    
    @implementation CustomAnonotationView
    
    - (id)initWithAnnotation:(id<BMKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{
        self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
        if (self) {
    //在一些方法中看到这样的方法
    //       隐藏气泡
    //        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    //        self.paopaoView = [[BMKActionPaopaoView alloc] initWithCustomView:view];
        }
        return self;
    }
    
    + (instancetype)annotationViewWithMap:(BMKMapView *)mapView withAnnotation:(id <BMKAnnotation>)annotation {
        if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
            static NSString *identifier = @"annotation";
            // 1.从缓存池中取
            CustomAnonotationView *annoView = (CustomAnonotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
            // 2.如果缓存池中没有, 创建一个新的
            if (annoView == nil) {
                annoView = [[CustomAnonotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
            }
            if ([annotation isKindOfClass:[CustomPointAnnotation class]]) {
                annoView.annotation = (CustomPointAnnotation *)annotation;
            }
            annoView.image = [UIImage imageNamed:@"annotation_default"];
            return annoView;
        }
        return nil;
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:百度地图开发小记

          本文链接:https://www.haomeiwen.com/subject/adyouxtx.html