2011-01-13 12 views
19

Tôi cần sao chép hiệu ứng mà UIButton thực hiện trên hình ảnh khi nhấn vào, đánh dấu. Xem:Làm cách nào để triển khai đánh dấu trên UIImage như UIButton khi khai thác?

alt text

Các PNG gốc là một hình vuông với nền alpha. Khi tôi đặt nó làm hình ảnh của UIButton, nó sẽ tự động áp dụng hiệu ứng trên các pixel không phải alpha của hình ảnh.

Làm cách nào để thực hiện tác vụ này?

Trả lời

49

Bạn có thể đạt được điều này với một loại đơn giản trên UIImage:

@interface UIImage (Tint) 

- (UIImage *)tintedImageUsingColor:(UIColor *)tintColor; 

@end 

@implementation UIImage (Tint) 

- (UIImage *)tintedImageUsingColor:(UIColor *)tintColor { 
    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); 
    CGRect drawRect = CGRectMake(0, 0, self.size.width, self.size.height); 
    [self drawInRect:drawRect]; 
    [tintColor set]; 
    UIRectFillUsingBlendMode(drawRect, kCGBlendModeSourceAtop); 
    UIImage *tintedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return tintedImage; 
} 

@end 

Đối tác dụng hiển thị ở trên, bạn sẽ vượt qua một cái gì đó giống như [UIColor colorWithWhite:0.0 alpha:0.3] như tham số tintColor (thử nghiệm với giá trị alpha).

+0

Công cụ tuyệt vời !!!! – hfossli

+1

Không giống như một số giải pháp khác nổi xung quanh SO, điều này có tác dụng tốt đẹp của không tô màu toàn bộ rect. Sử dụng tốt UIRectFillUsingBlendMode() –

+0

Câu trả lời hay, cảm ơn. – titaniumdecoy