0

さまざまなブレンド モードで画像を描画するために使用したい UIView サブクラスがあります。

コード:

@implementation CompositeImageView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)setBlendMode:(CGBlendMode) composite
{
    blender = composite;
}

-(void)setImage:(UIImage*) img
{
    image = img;
}

- (void)drawRect:(CGRect)rect
{
    NSLog(@"it draws");
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetBlendMode(c, blender);
    CGContextDrawImage(c, rect, image.CGImage);
}

@end

セットアップに使用するコードは次のとおりです。

[testImage setImage:[UIImage imageNamed:@"Prayer_Background_Paid"]];
[testImage setBlendMode:kCGBlendModeColor];
[testImage setNeedsDisplay];

インターフェイス ビルダーを使用して大きな長方形の UIView を配置し、そのクラスを CompositeImageView に設定しています。ただし、それでも大きな白い正方形として描画されます。drawRect 内のすべてをコメントアウトしても、白い正方形が描画されます。ただし、「描画します」がログに記録されているため、drawRect を呼び出しています。

4

1 に答える 1

0

kCGBlendModeColor が必要なものであると確信していますか? アップルのドキュメントから:

背景の輝度値をソース イメージの色相と彩度の値と共に使用します。

背景が白だとブレンドした画像も白く見えてしまうようです。

于 2012-04-28T01:54:13.583 に答える