关于设置代理 直接在此复制官方的设置:
-(void)viewWillAppear:(BOOL)animated
{
[_mapView viewWillAppear];
_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(void)viewWillDisappear:(BOOL)animated
{
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用时,置nil
}
我所遇到的坑是,自定义大头针时的坑。因为设置代理是在viewWillAppear中,而我直接就在viewdidload中直接添加大头针,所以很坑的事情来了,怎么都不显示自定义的大头针图片。
-
(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation{
if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"]; newAnnotationView.pinColor = BMKPinAnnotationColorPurple; //newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示 newAnnotationView.annotation = annotation; newAnnotationView.paopaoView = nil; newAnnotationView.image = [UIImage imageNamed:@"btn_weizhi_selected"]; UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAciton:)]; //设置点按的次数 tap.numberOfTapsRequired = 1; //设置点按的手指的数 tap.numberOfTouchesRequired = 1; // 2.为控件添加手势 [newAnnotationView addGestureRecognizer:tap]; return newAnnotationView;
}
return nil;
}
上述是mapview的一个代理方法,如果你直接在viewdidload中添加大头针是无法改变官方的大头针图片的,你只需要换个地方,例如网络请求中,刷新位置按钮然后触发添加大头针的方法即可,不知道你理解我的意思没。
PS:记录自己开发中遇到的坑,不喜勿喷。。。😅