2011-01-13 2 views
19

タップしたときにイメージ上でUIButtonが行う効果を再現する必要があります。参照:タップするとUIButtonのようなUIImageで強調表示を実装する方法は?

alt text

オリジナルのPNGは、アルファ背景を持つ正方形です。 UIButtonのイメージとして設定すると、イメージの非アルファピクセルに自動的にエフェクトが適用されます。

この効果を行うにはどうすればよいですか?

答えて

49

あなたは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 

、あなたは(アルファ値と実験)tintColorパラメータとして[UIColor colorWithWhite:0.0 alpha:0.3]のようなものを渡すと思います。

+0

素晴らしいもの!!!! – hfossli

+1

SOの周りに浮かぶ他のいくつかのソリューションとは異なり、これはrect全体を着色しないという素晴らしい効果があります。 UIRectFillUsingBlendMode()をうまく使います。 –

+0

すばらしい答えです、ありがとうございます。 – titaniumdecoy

関連する問題