我为我的所有地图引脚创建了一个自定义MKPinAnnotationView,但我在定制用户位置引脚时遇到问题。如果我为它创建一个自定义引脚,那么我将丢失蓝色脉动点,并用引脚替换它,我不想要它。所以我在viewForAnnotation方法中返回nil:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if(annotation == self.mapView.userLocation)
{
// show the blue dot for user's GPS location
return nil;
}
... code for custom annotation pins goes here
}
但是,我确实希望它在点击它时调用自定义标注视图。我已经尝试在选择蓝点时添加子视图:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if(view == [self.mapView viewForAnnotation:self.mapView.userLocation])
{
MKAnnotationView *userLocationView = [self.mapView viewForAnnotation:self.mapView.userLocation];
userLocationCalloutView = [[MyAnnotationCalloutView alloc] initWithFrame:CGRectMake(-113, -58, 247, 59)];
[userLocationCalloutView.rightAccessoryButton addTarget:self action:@selector(pinButtonTapped) forControlEvents:UIControlEventTouchDown];
[userLocationView addSubview:userLocationCalloutView];
}
}
但问题是,标注附件按钮位于命中区域之外,我无法添加hitTest:withEvent,因为蓝点注释视图是私有的......有什么想法吗?
答案 0 :(得分:2)
您可以在委托方法mapView中获取用户userLocation注释的构建MKAnnotationView:didAddAnnotationViews:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
for(MKAnnotationView *view in views)
{
if (view.annotation == mapView.userLocation)
{
view.canShowCallout = YES;
view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
break;
}
}
}