17

私は2つの異なるものを持っていますUIImageViewsUIImageViewスクリーン ブレンド モードを使用して、上部を下部とブレンドしたいと考えていますUIImageView

CALayer私は:のプロパティcompositingFilterを知っており、iOS では機能しないことを知っています。私は解決策をたくさん探しましたが、サブクラス化UIViewしてオーバーライドする方法を見つけましdrawRectた。

コンテキストをスクリーンブレンドモードに設定しようとしましたdrawRectが、それでもすべての画像が正常に描画されます。おそらく私は何か間違ったことをしている、またはアプローチが異なるはずです。これを実現するには、OpenGL または CALayer が必要かもしれません。誰か助けてくれませんか?

4

1 に答える 1

17

残念ながら、iOS の UIView 間で非複合ブレンドを行う方法はありません。UIKit はその機能を提供しません。すでにお気づきのように、CALayer もそれを行うことができません。

一般に、UIView に -drawRect を実装しても役に立ちません。空のビットマップに描画しています。その背後にあるビューのビットは含まれていません。これらはいつでも変更される可能性があるためです (ビューまたはレイヤーはアニメーション化される可能性があります)。CA は基本的に、レイヤーのコンテンツは互いに独立しているべきであると想定しています。

あなた試すことができます-drawRect:

  1. イメージ コンテキストを作成する
  2. -[CALayer renderInContext:]for eachを使用してビューの下のビューをキャプチャします
  3. 画像コンテキストから画像を作成する
  4. そのイメージをビューに描画します
  5. ブレンドモードを設定し、その上に描画します

しかし、それは遅くて壊れやすく、ビューのいずれかをアニメーション化すると機能しません。私はそれをお勧めしません。

本当にこれを行う必要がある場合は、シーン全体を切り替えて、より自由度の高い OpenGL でレンダリングする必要があります

于 2013-01-05T06:19:16.260 に答える