iosobjective-cuiimageviewmkannotationmkannotationview

set TintColor to MKAnnotationView image


I'm writing an application for iOS 7.0+ and I wanted to use new feature witch is: imageWithRenderingMode. I have a map annotation with this code:

-(MKAnnotationView*)annotationView {
    MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:@"AnnotationIdentifier"];
    annotationView.enabled = YES;
    annotationView.canShowCallout = YES;
    annotationView.image = [[UIImage imageNamed:@"star"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    annotationView.tintColor = [UIColor redColor];
    return annotationView;
}

I was expected that my pins will be red, but stays black, only the callout (i) icon turns red.

enter image description here

I was trying to set self.view.tintColor and self.mapView.tintColor in my ViewController but this not working either. How to turns this pins red?


Solution

  • There's a better solution than those proposed that doesn't involve creating a UIImageView.

    This Swift code will create a colored version of your UIImage.

    extension UIImage {
    
        func colorized(color : UIColor) -> UIImage {
            let rect = CGRectMake(0, 0, self.size.width, self.size.height);
            UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
            let context = UIGraphicsGetCurrentContext();
            CGContextSetBlendMode(context, .Multiply)
            CGContextDrawImage(context, rect, self.CGImage)
            CGContextClipToMask(context, rect, self.CGImage)
            CGContextSetFillColorWithColor(context, color.CGColor)
            CGContextFillRect(context, rect)
            let colorizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            return colorizedImage
        }
    }
    

    Call it like this:

    UIImage(named: "myImage")!
        .imageWithRenderingMode(.AlwaysTemplate)
        .colorized(UIColor.red())