8

互いの上に表示される 2 つの UIImageViews があります。そのうちの 1 つは、Gesture Recognizer を使用してドラッグできます。

Multiply のようなブレンド モードを使用して ImageViews をレンダリングする方法はありますか? それらがそれぞれの上に移動すると、そのブレンドモードでレンダリングされるように?

4

1 に答える 1

10

次のようなことを実現するには、親ビューのdrawRect:関数をオーバーライドする必要があります。

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

    [image1.image drawInRect:image1.frame blendMode:kCGBlendModeMultiply alpha:1];
    [image2.image drawInRect:image2.frame blendMode:kCGBlendModeMultiply alpha:1];
    [super drawRect:rect];
}

現在のgraphicsContextを取得し、乗算ブレンドモードを使用して2つの画像を描画します。

これを表示するには、2つの画像のアルファを0に設定する必要があります。そうしないと、新しく描画されたコンテンツが不明瞭になります。親ビューがそれらを再描画しているので、結果の乗算されたバージョンが表示されます。

また、画像の位置が更新されるたびに、親ビューでsetNeedsDisplayを呼び出して、drawRectをもう一度呼び出すように強制する必要があります。

Quartz 2Dを利用して目的を達成するためのより効率的な方法があると確信していますが、これはおそらく最も簡単な方法です。

于 2013-01-30T19:47:08.750 に答える