大頭針視圖也存在重用機(jī)制,優(yōu)化內(nèi)存
類似于tableView一樣,設(shè)置代理,實(shí)現(xiàn)重用方法viewForAnnotation
設(shè)置大頭針視圖顏色需要使用MKAnnotationView的子類MKPinAnnotationView才行
為了不影響定位大頭針狀態(tài),所以重用中需要判斷排除定位大頭針
定位大頭針類型(MKUserLocation)
/**
* 當(dāng)設(shè)置大頭針視圖的時(shí)候大頭針模型時(shí)調(diào)用
*
* @param mapView 地圖視圖
* @param annotation 大頭針模型
*
* @return 大頭針視圖
*/
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *identifier = @"annotation";
// 排除定位大頭針(否則定位大頭針樣式也會(huì)被修改掉)
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
// 設(shè)置顏色需要使用MKAnnotationView的子類才行 MKPinAnnotationView
MKPinAnnotationView *anno = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (anno == nil) {
anno = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier];
}
// 設(shè)置屬性
anno.pinTintColor = [UIColor greenColor];
/**
* 以上設(shè)置后,大頭針視圖上方的標(biāo)注還需要手動(dòng)設(shè)置顯示
*/
// 設(shè)置顯示標(biāo)注
anno.canShowCallout = YES;
// 設(shè)置動(dòng)畫(huà)效果滑落
anno.animatesDrop = YES;
return anno;
}
演示效果(未設(shè)置顯示標(biāo)注和動(dòng)畫(huà)滑落):