我已经完成了MKAnnotionView的实现:
- (MKAnnotationView*) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if([annotation isKindOfClass:[MKUserLocation class]])
return nil;
NSString *identifier = @"mypin";
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if(annotationView == nil)
{
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.canShowCallout = YES;
UIImageView *pin = [[UIImageView alloc] initWithImage:[UIImage imageNamed:identifier]];
UIImageView *shadow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pin_shadow"]];
shadow.frame = CGRectMake(21, 36, 60, 27);
[annotationView addSubview:shadow];
[annotationView addSubview:pin];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 11, 20);
[btn setImage:[UIImage imageNamed:@"arrow"] forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = btn;
annotationView.centerOffset = CGPointMake(-(44.0f/2), -62.0f);
}
return annotationView;
}
地图上的引脚和阴影显示正常,但是当我按下一个引脚时,现在会显示标注。我很肯定注释对象有标题和副标题值。
如果我使用MKAnnotionView上的.image属性添加我的图钉它可以工作但是我的阴影位于图钉顶部.. mehh! :/
出了什么问题?
答案 0 :(得分:2)
由于您要将图像添加为annotationView的子视图而不使用图像设置器,我相信annotationView的框架为CGRectZero
。 (您可以通过将clipToBounds激活为true来轻松检查)
因此,您的pin没有hitZone来接收事件并显示标注。
您可能希望将annotationView的边界设置为两个图像的总大小(图钉+阴影)。
annotationView.bounds = CGRectMake(0, 0, pin.frame.size.width, pin.frame.size.width);
//+Shadow ? if not : annotationView.bounds = pin.bounds;
在一个不相关的说明中,我相信您在重复使用注释时可能会遇到问题,因为您没有将注释重置为annotationView。 您可能希望将其更改为:
if(annotationView ==nil) { }
annotationView.annotation = annotation;
return annotationView;