This repository has been archived by the owner on Oct 9, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
UIButton+tintImage.m
80 lines (63 loc) · 2.38 KB
/
UIButton+tintImage.m
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//
// UIButton+tintImage.m
// UITintedButton
//
// Created by Filip Stefansson on 13-10-20.
// Copyright (c) 2013 Pixby Media AB. All rights reserved.
//
#import "UIButton+tintImage.h"
@implementation UIButton (tintImage)
#pragma mark Image tint
-(void)setImageTintColor:(UIColor *)color forState:(UIControlState)state
{
if (self.imageView.image){
UIImage *tintedImage = [self imageForState:state];
tintedImage = [self tintedImageWithColor:color image:tintedImage];
[self setImage:tintedImage forState:state];
}
else
NSLog(@"%@ UIButton does not have any image to tint.", self);
}
+(void)tintButtonImages:(NSArray *)buttons withColor:(UIColor *)color forState:(UIControlState)state
{
for (UIButton *button in buttons)
{
[button setImageTintColor:color forState:state];
}
}
#pragma mark Background tint
-(void)setBackgroundTintColor:(UIColor *)color forState:(UIControlState)state
{
if ([self backgroundImageForState:state])
[self setBackgroundImage:[self tintedImageWithColor:color image:[self backgroundImageForState:state]] forState:state];
else
NSLog(@"%@ UIButton does not have any background image to tint.", self);
}
+(void)tintButtonBackgrounds:(NSArray *)buttons withColor:(UIColor *)color forState:(UIControlState)state
{
for (UIButton *button in buttons)
{
[button setBackgroundTintColor:color forState:state];
}
}
#pragma mark Tint method
// Mod of @horsejockey's method:
// http://stackoverflow.com/a/19413033
- (UIImage *)tintedImageWithColor:(UIColor *)tintColor image:(UIImage *)image {
UIGraphicsBeginImageContextWithOptions(image.size, NO, [[UIScreen mainScreen] scale]);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
// draw alpha-mask
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextDrawImage(context, rect, image.CGImage);
// draw tint color, preserving alpha values of original image
CGContextSetBlendMode(context, kCGBlendModeSourceIn);
[tintColor setFill];
CGContextFillRect(context, rect);
UIImage *coloredImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return coloredImage;
}
@end