0

画像(可能な形状)に基づいてマスクを作成する必要があります。する必要がある:

  1. 適切なマスクとして CGPath を使用して CALayer を作成します。
  2. [UIView.layer setMask: 上のレイヤーで] を呼び出します

主な大きな問題は、白黒画像に基づいて CGPath を設定する方法ですか? または、画像から直接マスクを配置することは可能ですか?

ありがとう!


マスクの画像例: マスクの例

4

2 に答える 2

6

アルファ チャネルを使用して画像を作成する必要があります。CALayerのマスクプロパティのドキュメントによると:

アルファ チャネルがマスクとして使用され、レイヤーの背景と、フィルター処理された背景を使用してレイヤーのコンテンツを合成した結果との間で選択するオプションのレイヤー。

したがって、マスクとして使用するレイヤーにはアルファ チャネルが必要です。画像を使用してこのようなチャネルを作成する場合は、画像自体にアルファ チャネルが必要です。したがって、上で投稿した白黒マスクを画像のアルファ チャネルにコピーする必要があります。その特定の画像の色は無視されます。次に、画像をロードし、レイヤーの内容をそれに設定し、そのレイヤーを別のレイヤー マスクとして使用します。このあたりの何か:

UIImage* imageWithAlphaChannel = [UIImage imageNamed:@"alpha.png"]; // Won't work with jpg
CGImageRef cgImageWithAlpha = [imageWithAlphaChannel CGImage];
CALayer* maskingLayer = [CALayer layer];
maskingLayer.contents = (id)cgImageWithAlpha;

//Assume viewToBeMasked is the view, who's layer needs to be masked
CALayer* layerToBeMasked = viewToBeMasked.layer;
layerToBeMasked.mask = maskingLayer;
maskingLayer.frame = layerToBeMasked.bounds;
//Alternativly use: viewToBeMasked.layer.mask = maskingLayer;

ブラウザでコーディングされているため、システム エラーは許されません。

すべてのマスクを png ファイルとして保存すると、アプリのサイズが大きくなる可能性があります。マスクを jpg として保存し、CoreGraphics 描画関数を使用して実行時に適切なアルファ バージョンを作成できます。しかし、それは別の質問です.....

于 2011-12-09T10:10:56.007 に答える
3

非常によく似た問題は、私がしばらく前にしたことと思います。基本的に、Adobe Illustrator からファイルをエクスポートし、そのファイルを CGPath に変換するルーチンを実行する必要があります。

この質問に対する私の回答で、その方法を見つけることができます。

湾曲した領域でタッチイベントを検出/処理する方法は?

于 2011-12-08T16:06:15.710 に答える