2013-11-22 79 views
0

我想,這將是一個愚蠢的事情,但我不知道如何解決它。不調用的MKMapView委託(MapView類:ViewForAnnotation)

首先,我不得不說我的麻煩是因爲有時候工作。

我有一個主控制器,其某些類別,然後觸摸按鈕就可以打開其他視圖控制器,在該視圖控制器有其中包含與註釋一個的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

我敢肯定,此代碼的偉大工程(因爲我可以看到,在其他類別),它必須是執行時間的東西。

如果有人對發生了什麼有一個想法,它應該很好。

謝謝大家!

+0

在後臺線程中調用addListOfPointsWithNumber嗎?如果是這樣,請嘗試添加主線程。請參閱http://stackoverflow.com/questions/16537949/how-to-add-annotations-to-mkmapview-asyncronously和http://stackoverflow.com/a/1995254/467105。 – Anna

回答

0

您還應該返回東西在所有情況下在您的mapView:viewForAnnotation:,而您目前只返回某些類型的註釋。至少返回nil,看看是否有幫助 - 也許這種方法的警告是阻止某種類型的運行時使用(雖然這有點拉伸)。

相關問題