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

百度地图开发小记

作者: 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