-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUIImage+Tint.m
More file actions
62 lines (47 loc) · 1.64 KB
/
UIImage+Tint.m
File metadata and controls
62 lines (47 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//
// UIImage+Tint.m
//
// Created by Matt Gemmell on 04/07/2010.
// Copyright 2010 Instinctive Code.
//
#import "UIImage+Tint.h"
@implementation UIImage (MGTint)
- (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;
}
@end