大头针视图也存在重用机制,优化内存
类似于tableView一样,设置代理,实现重用方法viewForAnnotation
设置大头针视图颜色需要使用MKAnnotationView的子类MKPinAnnotationView才行
为了不影响定位大头针状态,所以重用中需要判断排除定位大头针
定位大头针类型(MKUserLocation)
/**
* 当设置大头针视图的时候大头针模型时调用
*
* @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
MKPinAnnotationView *anno = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (anno == nil) {
anno = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier];
}
// 设置属性
anno.pinTintColor = [UIColor greenColor];
/**
* 以上设置后,大头针视图上方的标注还需要手动设置显示
*/
// 设置显示标注
anno.canShowCallout = YES;
// 设置动画效果滑落
anno.animatesDrop = YES;
return anno;
}
演示效果(未设置显示标注和动画滑落):