Custom MKAnnotationView with frame,icon and image

I’ve been searching for a similar solution on how to design a custom MKAnnotationView like this one.

enter image description here

  • What's the difference between AnyObject and UIbutton as sender?
  • UITextField -webView no longer supported
  • Is it possible to use iOS 7's modified Helvetica in apps?
  • How to create popover in iPhone app?
  • In IOS MapView, is there an annotation title call back function or a way to set a target?
  • iOS dark gray box active style
  • I’v subclassed the MKAnnotation and i was able to add an image named F.png
    the F.png is a frame image as showed in the picture.
    what i want is to add an inner image. (colored Blue in the picture i draw)

    - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
    {    
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;
    static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
    if(annotationView)
        return annotationView;
    else
    {
        MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];
        annotationView.canShowCallout = YES;
        annotationView.image = [UIImage imageNamed:[NSString stringWithFormat:@"F.png"]];        
        UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [rightButton addTarget:self action:@selector(writeSomething:) forControlEvents:UIControlEventTouchUpInside];
        [rightButton setTitle:annotation.title forState:UIControlStateNormal];
    
        annotationView.rightCalloutAccessoryView = rightButton;
        annotationView.canShowCallout = YES;
        annotationView.draggable = NO;
        return annotationView;
    }
    return nil;
    }
    

    2 Solutions Collect From Internet About “Custom MKAnnotationView with frame,icon and image”

    here in your code

    else
    {
        MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];
        annotationView.canShowCallout = YES;
    
        //change here
        annotationView.image = [UIImage imageNamed:[NSString stringWithFormat:@"F.png"]];  
    
        UIImage *frame = [UIImage imageNamed:[NSString stringWithFormat:@"F.png"];
        UIImage *image = theImageInFrameInner;
    
        UIGraphicsBeginImageContext(CGSizeMake(pin.size.width, pin.size.height));
    
        [frame drawInRect:CGRectMake(0, 0, frame.size.width, frame.size.height)];
        [image drawInRect:CGRectMake(2, 2, 60, 60)]; // the frame your inner image
        //maybe you should draw the left bottom icon here, 
    
        //then set back the new image, done
        annotationView.image = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    
        UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [rightButton addTarget:self action:@selector(writeSomething:) forControlEvents:UIControlEventTouchUpInside];
        [rightButton setTitle:annotation.title forState:UIControlStateNormal];
    
        annotationView.rightCalloutAccessoryView = rightButton;
        annotationView.canShowCallout = YES;
        annotationView.draggable = NO;
        return annotationView;
    }
    
    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    
    
        static NSString *AnnotationViewID = @"annotationViewID";
    
        MKAnnotationView *annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
    
        if (annotationView == nil)
        {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
        }
    
        UIImage *imgPinBorder = [UIImage imageNamed:@"pinBorder.png"];
        UIImageView *imageViewPinBorder = [[UIImageView alloc] initWithImage:imgPinBorder];
        imageViewPinBorder.center = annotationView.center;
        [annotationView addSubview:imageViewPinBorder];
    
        UIImage *img = [UIImage imageNamed:@"myIcon.png"];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:img];
        imageView.center = annotationView.center;
        [annotationView addSubview:imageView];
    
        annotationView.annotation = annotation;
    
    
        UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [rightButton addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
        [rightButton setTitle:annotation.title forState:UIControlStateNormal];
    
        annotationView.rightCalloutAccessoryView = rightButton;
        annotationView.canShowCallout = YES;
        annotationView.draggable = NO;
    
    
    
        return annotationView;
    }