2009-11-26 17 views
6

私はマップに注釈をつけ、画像をうまく設定していますが、MapViewで注釈をタップすると、イメージは自分のカスタムイメージから赤いピンに戻ります。どうしてこれなの?カスタムMKMapViewアノテーションイメージがタッチで消えるのはなぜですか?

- (MKAnnotationView *)mapView:(MKMapView *)newMapView viewForAnnotation:(id)newAnnotation { 
    MKPinAnnotationView *annotation = [[MKPinAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"]; 
    if (annotation == nil) { 
     annotation = [[MKAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"]; 
    } 

    annotation.image = [UIImage imageNamed:@"anno.png"]; 
    annotation.canShowCallout = YES; 
    annotation.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bus_stop_30x30.png"]]; 
    annotation.leftCalloutAccessoryView = imgView; 

    return annotation; 
}

私のコードは、この問題を引き起こさないサンプルコードと同じです。

答えて

17

他の人に同じ問題がある場合に備えて、私自身の質問に答えてください。 「MKPinAnnotationView」を使用していることに注目してください。「MKAnnotationView」に変更する必要があります。私はこれが最善の方法の一つだと思い

- (MKAnnotationView *)mapView:(MKMapView *)newMapView viewForAnnotation:(id)newAnnotation { 
    MKAnnotationView *annotation = [[MKAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"]; 

    if (annotation == nil) { 
     annotation = [[MKAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"]; 
    } 

    annotation.image = [UIImage imageNamed:@"anno.png"]; 
    annotation.canShowCallout = YES; 
    annotation.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bus_stop_30x30.png"]]; 
    annotation.leftCalloutAccessoryView = imgView; 

    return annotation; 
} 
+0

おかげで私の時間をsolution..savedありがとう.. –

0

固定コード

(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation 
{ 
    NSLog(@"welcome into the map view annotation"); 
    MyAnnotation* myAnnotation1=annotation; 

    // if it's the user location, just return nil. 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
    return nil; 

    if([mapView isEqual:mapMainView]== NO) 
    { 
     return nil; 
    } 
    // try to dequeue an existing pin view first 
    // if ([annotation isKindOfClass:[myAnnotation1 class]]) 
    // { 

    // try to dequeue an existing pin view first 
    static NSString* AnnotationIdentifier = @"AnnotationIdentifier"; 

    MKPinAnnotationView* pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier]; 

    if (nil == pinView) 
    { 
     MKAnnotationView* annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation 

     reuseIdentifier:AnnotationIdentifier] autorelease]; 
     // annotationView.canShowCallout = YES; 
     // pinView.animatesDrop=YES; 
     //pinView.pinColor=MKPinAnnotationColorPurple; 

     //image 
     UIImage* flagImage = [UIImage imageNamed:@"map_marker_over2.png"]; 

     CGRect resizeRect; 

     resizeRect.size = flagImage.size; 
     CGSize maxSize = CGRectInset(self.view.bounds, 
     [MapPropertyViewController annotationPadding], 
     [MapPropertyViewController annotationPadding]).size; 
     maxSize.height -= self.navigationController.navigationBar.frame.size.height + [MapPropertyViewController calloutHeight]; 
     if (resizeRect.size.width > maxSize.width) 
     resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height/resizeRect.size.width * maxSize.width); 
     if (resizeRect.size.height > maxSize.height) 
     resizeRect.size = CGSizeMake(resizeRect.size.width/resizeRect.size.height * maxSize.height, maxSize.height); 

     resizeRect.origin = (CGPoint){0.0f, 0.0f}; 
     UIGraphicsBeginImageContext(resizeRect.size); 
     [flagImage drawInRect:resizeRect]; 
     UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     annotationView.image = resizedImage; 
     annotationView.opaque = NO; 

     UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     [rightButton setTitle:annotation.title forState:UIControlStateNormal]; 
     [rightButton addTarget:self 
     action:@selector(showDetails:) 
     forControlEvents:UIControlEventTouchUpInside]; 
     rightButton.tag = myAnnotation1.tagAnnotation; 
     annotationView.rightCalloutAccessoryView = rightButton; 

     profileIconView = [[UIImageView alloc]initWithFrame:CGRectMake(18.5f, 10.0f, 37.0f, 30.0f)]; 
     annotationView.leftCalloutAccessoryView = profileIconView; 
     //image 
     img = [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:[arrImages objectAtIndex:myAnnotation1.tagAnnotation]]]]; 
     NSLog(@"Annotation Click %d",[arrImages count]); 
     NSLog(@"image %@",img); 
     profileIconView.image=img; 

     [profileIconView release]; 

     [annotationView setEnabled:YES]; 
     [annotationView setCanShowCallout:YES]; 
     return annotationView; 
    } 
    return pinView; 
    // } 
    // return nil; 
} 
+2

理由を説明できますか?将来の読者に役立つだろう。 –

0
Try this if you want to set both Source to Destination pin images different. 

    MKPointAnnotation * sourceAnno= [[MKPointAnnotation alloc] init]; 
    sourceAnno.coordinate=CLLocationCoordinate2DMake(YourSourcelatitude,YourSourcelongitude); 
    [sourceAnno setAccessibilityLabel:@“Source”]; 
    sourceAnno.title = @“You”; 
    [mapview addAnnotation: sourceAnno]; 

    DestinationAnno = [[MKPointAnnotation alloc] init]; 
    DestinationAnno.coordinate = CLLocationCoordinate2DMake(YourDestinationlatitude,YourDestinationlongitude); 
    [DestinationAnno setAccessibilityLabel:@“Destination”]; 
    DestinationAnno.title [email protected]“Destination”; 
    [mapview addAnnotation: DestinationAnno]; 

    In Delegate Method 
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKPointAnnotation *PointAnno=(MKPointAnnotation *)annotation; 
    NSString * kPinAnnotationIdentifier = PointAnno.accessibilityLabel; 
    MKAnnotationView *AnnotationView = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:kPinAnnotationIdentifier]; 

    if ([kPinAnnotationIdentifier isEqualToString:@"Source"]) 
    { 
     AnnotationView.centerOffset = CGPointMake(8, -14); 
     AnnotationView.calloutOffset = CGPointMake(-8, 0); 
     AnnotationView.image = [UIImage imageNamed:@"pin_blue.png"]; 
     AnnotationView.canShowCallout = YES; 
    } 
    else if([kPinAnnotationIdentifier isEqualToString:@"Destination"]) 
    { 
     AnnotationView.centerOffset = CGPointMake(8, -14); 
     AnnotationView.calloutOffset = CGPointMake(-8, 0); 
     AnnotationView.image = [UIImage imageNamed:@"pin_red.png"]; 
     AnnotationView.canShowCallout = YES; 
    } 
    return AnnotationView; 
} 

は、このために

関連する問題