自定义MKAnnotationView间歇性地识别触摸

时间:2013-08-19 04:17:59

标签: ios mapkit mkannotationview

我有一个自定义MKAnnotationView我正在从XIB加载。当我第一次加载mapview时,我有几个标准MKAnnotationView

当用户选择一个时,会显示自定义MKAnnotationView。我希望用户能够点击自定义注释视图中的任何位置来呈现新的视图控制器。

我尝试过的(所有这些都是我在StackOverflow上找到的建议):

奇怪的是,如果我在注释出现时拖动地图,按钮工作正常。该问题仅在我第一次显示自定义视图时显示。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

你应该签出MKMapKit Delegate文档,它有很多很好的方法可以用来完成你想要做的事情。我会绝对不尝试将UIButton添加到注释视图中。

管理注释视图 - mapView:viewForAnnotation: - mapView:didAddAnnotationViews: - mapView:annotationView:calloutAccessoryControlTapped: 拖动注释视图 - mapView:annotationView:didChangeDragState:fromOldState: 选择注释视图 - mapView:didSelectAnnotationView:
- mapView:didDeselectAnnotationView:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation  {
if([annotation isKindOfClass: [MKUserLocation class]])
{
    return nil;
}
else if([annotation isKindOfClass:[MYCLASS class]])
{
    static NSString *annotationViewReuseIdentifier = @"annotationViewReuseIdentifier";
    MKAnnotationView *annotationView = (MKAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewReuseIdentifier];
    if (annotationView == nil)
    {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewReuseIdentifier];
    }

    //Add an Image!
    annotationView.image = [UIImage imageNamed:@"trashMarker.png"];

    //Move the Frame Around!
    [annotationView setFrame:CGRectMake(annotationView.frame.origin.x, annotationView.frame.origin.y - annotationView.frame.size.height, annotationView.frame.size.height, annotationView.frame.size.width)];

    //Finally Set it as the annotation!
    annotationView.annotation = annotation;

    //Return the annotationView so the MKMapKit can display it!
    return annotationView;
}}

MKAnnotation的子类(IE符合协议)默认情况下应该包含一个标记(我认为)但是如果它不只是自己添加一个属性,那么你可以区分地图上的不同标记。你的方法应该是这样的,

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view  {
MYCLASS *selectedMapPin = view.annotation;
if(selectedMapPin.tag == MY_PIN_TAG)
{
    //SHOW VIEW CONTROLLER
}}

有关更多示例,请参阅我们的Green Up Vermont开源项目

Green Up Vermont iOS App