iOS:在移动引脚上显示Callout视图

时间:2017-01-19 07:06:57

标签: ios objective-c mkannotationview callout

我已经实现了与Uber iOS应用程序相同的功能,可以根据带动画的路径移动引脚。

问题:当我在移动时点击该图钉时,我无法获得didSelectAnnotationView的{​​{1}}代表。但是当引脚稳定意味着没有移动时它会被调用。

代码:创建图钉

MKMapView

更新坐标

-(MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id<MKAnnotation>)annotation {

    if([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    else {

        NSString *annotationIdentifier = @"CustomViewAnnotation";

        AnnotationView * annotationView = (AnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        if(annotationView == nil) {

            annotationView = [[AnnotationView alloc] initWithAnnotation:annotation
                                                                        reuseIdentifier:annotationIdentifier];
            UIImage *pinIcon = [UIImage imageNamed:@"carIcon"];
            annotationView.btnInfo = [[UIButton alloc] init];
            annotationView.frame = CGRectMake(0.0f, 0.0f, pinIcon.size.width, pinIcon.size.height);
            annotationView.btnInfo.frame = annotationView.frame;
            [annotationView.btnInfo setBackgroundImage:pinIcon forState:UIControlStateNormal];
            [annotationView addSubview:annotationView.btnInfo];
            [annotationView.btnInfo setUserInteractionEnabled:NO];
        }

        else
            annotationView.annotation = annotation;

        annotationView.enabled = YES;
        annotationView.canShowCallout = YES;

        return annotationView;
    }
}

1 个答案:

答案 0 :(得分:2)

试试这个。

我认为您所看到的行为是因为默认情况下,用户交互是使用新的块调用禁用持续时间动画。

你可以通过传递 UIViewAnimationOptionAllowUserInteraction 来覆盖它,如下所示:

[UIView animateWithDuration:3 
    delay:0
    options:UIViewAnimationOptionAllowUserInteraction
    animations:^{
       myAnnotation.coordinate = newLocation;
       AnnotationView *annotationView = (AnnotationView *)[self.mapView viewForAnnotation:myAnnotation];                
       annotationView.transform = CGAffineTransformMakeRotation(getAngle);
     }
 completion:nil];