I am working on a custom annotation displaying a background image inside an inline image. I based my code on this: Custom MKAnnotationView with frame, icon and image And my code:
else if ([annotation isKindOfClass:[ImagePin class]]){ static NSString *identifierImage = @"ImagePinLocation"; MKAnnotationView *annotationImageView = (MKAnnotationView *) [self.mapView dequeueReusableAnnotationViewWithIdentifier:identifierImage]; if(annotationImageView){ return annotationImageView; } else { annotationImageView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifierImage]; annotationImageView.canShowCallout = YES; annotationImageView.image = [UIImage imageNamed:@"image_bg_mappa"]; UIImage *frame = [UIImage imageNamed:@"image_bg_mappa"]; ImagePin *imagePinImage = annotation; NSLog(@"%@", [NSString stringWithFormat:@"%@", imagePinImage.image]); NSString *urlStringForImage = [NSString stringWithFormat:@"%@", imagePinImage.image]; NSURL *urlForImage = [NSURL URLWithString:urlStringForImage]; UIImageView *imageView = [[UIImageView alloc] init]; [imageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", urlForImage]] placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]]; UIGraphicsBeginImageContext(CGSizeMake(annotationImageView.image.size.width, annotationImageView.image.size.height)); [frame drawInRect:CGRectMake(0, 0, frame.size.width, frame.size.height)]; [imageView.image drawInRect:CGRectMake(2, 2, 48, 38)];
And I have two methods:
(void)writeSomething { } (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { }
But:
- Do not show my rightButton callout (do not show also button)
- I prefer that when you click on the full image / annotation, it will call the mapView annotationView method.
How can i do this? Why, when I click on the annotation, it does not call my calloutAccessoryControlTapped method? On this map, I also have a different type of pin (mkpinannotation) and it works fine (also the calloutAccessoryControlTapped method works fine with these contacts). What is the problem? Thanks to everyone, and sorry for my poor English (I'm learning it).
EDIT: My full code for the viewForAnnotation method: https://gist.github.com/anonymous/6224519e308d6bf56c4c MKPinAnnotation works fine.
EDIT: This is my ImagePin.h
And my ImagePin.m
EDIT: Here I add the annotation:
- (void)imagePositions:(NSDictionary *)responseData { for (id<MKAnnotation> annotation in self.mapView.annotations) { if ([annotation isKindOfClass:[ImagePin class]]){ //[self.mapView removeAnnotation:annotation]; } } for (NSArray *row in responseData) { NSString * imageBeachId = [row valueForKey:@"id"]; NSNumber * latitude = [row valueForKey:@"lat"]; NSNumber * longitude = [row valueForKey:@"lng"]; NSString * imageBeach = [row valueForKey:@"fb_photo_url"]; CLLocationCoordinate2D coordinate; coordinate.latitude = latitude.doubleValue; coordinate.longitude = longitude.doubleValue; ImagePin *annotation = [[ImagePin alloc] initWithImage:imageBeach imagebeachId:imageBeachId coordinate:coordinate]; [self.mapView addAnnotation:annotation]; } }
source share