0

UIView drawRectをオーバーライドする際に、メイン画像を。で描画しCGContextDrawImageます。その上に別の画像を(乗算ブレンドモードで)描画する必要があるので、実際にそのに描画する必要があります。

この2番目の画像は動的に生成されるため、準備する必要があります(マスクする必要があり、サイズが異なる場合があります)。したがって、最終的には生成する必要があります。メインの画像に適用する前に、この2番目の画像を描画してマスクできる2番目のコンテキストを取得するにはどうすればよいですか?現在のコンテキストを描画すると、マスクする前にメインのコンテキストは直接描画されません。

- (void) drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    CGContextDrawImage(ctx, CGRectMake(0, 0, rect.size.width, rect.size.height), [UIImage imageNamed:@"actionBg.png"].CGImage);

    // prevent the drawings to be flipped
    CGContextTranslateCTM(ctx, 0, rect.size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);

    // generate the overlay
    if ([self isActive] == NO && self.fullDelay != 0) { // TODO: remove fullDelay check!
        int segmentSize = (ACTION_SIZE / [self fullDelay]);

        for (int i=0; i<[self fullDelay]; i++) {
            float alpha = 0.9 - (([self fullDelay] * 0.1) - (i * 0.1));
            [[UIColor colorWithRed:120.0/255.0 green:14.0/255.0 blue:14.0/255.0 alpha:alpha] setFill];

            if (currentDelay > i) {
                CGRect r = CGRectMake(0, i * segmentSize, ACTION_SIZE, segmentSize);
                CGContextFillRect(ctx, r);
            }
            [[UIColor colorWithRed:1 green:1 blue:1 alpha:0.3] setFill];
            CGRect line = CGRectMake(0, (i * segmentSize) + segmentSize - 1 , ACTION_SIZE, 1);
            CGContextFillRect(ctx, line);
        }

        UIImage *overlay = UIGraphicsGetImageFromCurrentImageContext();
        UIImage *overlayMasked = [TDUtilities maskImage:overlay withMask:[UIImage imageNamed:@"actionMask.png"]];
    }
}

ここでoverlayMaskedには正しい画像が含まれていますが、メインコンテキストを使用して準備したので、すべてが混乱しているわけではありません。ありがとう

ありがとう

4

1 に答える 1

1

UIGraphicsBeginImageContextWithOptionsまたはを使用して、ビットマップ コンテキストを作成できますCGBitmapContextCreate。ビットマップ コンテキストでの描画が終了したら、UIGraphicsGetImageFromCurrentImageContextまたはCGBitmapContextCreateImage(必要に応じて) を使用してイメージを取得し、 または を使用してコンテキストを解放できUIGraphicsEndImageContextますCGContextRelease

于 2012-11-27T07:27:01.693 に答える