UIImage 混合给定的颜色

- (UIImage *)imageTintedWithColor:(UIColor *)color

{

// This method is designed for use with template images, i.e. solid-coloured mask-like images.

return [self imageTintedWithColor:color fraction:0.0]; // default to a fully tinted mask of the image.

}



- (UIImage *)imageTintedWithColor:(UIColor *)color fraction:(CGFloat)fraction

{

if (color) {

// Construct new image the same size as this one.

UIImage *image;

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {

UIGraphicsBeginImageContextWithOptions([self size], NO, 0.0); // 0.0 for scale means "scale for device's main screen".

}

#else

if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0) {

UIGraphicsBeginImageContext([self size]);

}

#endif

CGRect rect = CGRectZero;

rect.size = [self size];

// Composite tint color at its own opacity.

[color set];

UIRectFill(rect);

// Mask tint color-swatch to this image's opaque mask.

// We want behaviour like NSCompositeDestinationIn on Mac OS X.

[self drawInRect:rect blendMode:kCGBlendModeDestinationIn alpha:1.0];

// Finally, composite this image over the tinted mask at desired opacity.

if (fraction > 0.0) {

// We want behaviour like NSCompositeSourceOver on Mac OS X.

[self drawInRect:rect blendMode:kCGBlendModeSourceAtop alpha:fraction];

}

image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;

}

return self;

}


你可能感兴趣的:(iphone)