不调用MKMapView委托(mapView:ViewForAnnotation)

时间:2013-11-22 09:13:25

标签: ios mkmapview mapkit

我认为这将是一件愚蠢的事情,但我不知道如何解决它。

首先,我必须说我的麻烦是因为这项工作有时候。

我有一个主控制器,某些类别,然后触摸按钮,你可以打开其他视图控制器,在这个视图控制器中有一个自定义视图,其中包含带注释的mkmapview。

我的问题是,在某些类别中,它会部署注释,而在其他类别中则不会。

如果没有,你可以检查注释是否在MKMapView内部,但是在你再次与地图交互之前它没有调用mapView:ViewForAnnotation。

我将展示一些代码:

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code

    CGRect mapFrame = CGRectMake(0, 0, frame.size.width, frame.size.height);

    mapViewDefault = [[MKMapView alloc] initWithFrame:mapFrame];
    mapViewDefault.delegate = self;
    NSLog(@"Eres delegado!");
    CLLocationCoordinate2D initialLocationCoordinate = [DataManager dataManager].centerCoordinate;
    [mapViewDefault setCenterCoordinate:initialLocationCoordinate];
    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(initialLocationCoordinate, 3000, 3000);
    [mapViewDefault setRegion:viewRegion];
    [mapViewDefault setUserInteractionEnabled:NO];
    [mapViewDefault setScrollEnabled:NO];
    [mapViewDefault setZoomEnabled:NO];
    if(TAPIsiOS7()){
        [mapViewDefault setRotateEnabled:NO];
    }
    [self addSubview:mapViewDefault];
}
return self;
}

- (void)addListOfPointsWithNumber:(NSArray*)arrayPoints {
NSLog(@"Añadimos anotación al array anotaciones");
[mapViewDefault removeAnnotations:mapViewDefault.annotations];
for (Place *place in arrayPoints) {
    if(![place.coordinate isEqualToString:@"0 0"]){
        Annotation *annotation = [[Annotation alloc] init];
        annotation.coordinate = place.lCoordinate;
        annotation.number = place.number;
        annotation.place = place;
        [mapViewDefault addAnnotation:annotation];
    }
}
}

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

if([annotation isKindOfClass:[Annotation class]]){
    NSLog(@"Añadimos anotación al mapa");
    Annotation *annotationMap = (Annotation *)annotation;

    NSString *identifier = @"Pin";

    UIImage *pinImage = [UIImage imageNamed:@"Pin.png"];

    MKAnnotationView *pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
    pinView.frame = CGRectMake(0, 0, pinImage.size.width, pinImage.size.height);


    if (annotationMap.number>0) {
        pinImage = [self imageWithView:pinImage andNumber:annotationMap.number];
    }
    pinView.image = pinImage;
    pinView.annotation = annotationMap;

    return pinView;
}
}

和3张图片:

enter image description here enter image description here enter image description here

我很确定这段代码效果很好(因为我可以在其他类别中看到它)并且它必须具有执行时间。

如果有人知道发生了什么,那应该很好。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您应该在mapView:viewForAnnotation:的所有情况下返回某些内容,而您目前只返回某些类型的注释。至少返回nil并查看是否有帮助 - 可能对此方法的警告阻止某种运行时使用(尽管这有点拉伸)。