比如说A是一个imageView,B仅仅是一个普通的透明的view,我希望A被B盖住的部分是彩色的,而没有盖住的部分是黑白的,请问有什么实现的思路吗
业精于勤,荒于嬉;行成于思,毁于随。
は A の layer.mask 実装を制御できます。マスクは A と B の重複領域です。rect の塗りつぶし layer.mask は、重複領域の path を計算することで変更できます。多くのマスキング効果はマスクを使用して実現されます。
layer.mask
rect
path
参考になるコードを書きました。プレイグラウンドで効果を直接確認できます:
正常に実行されると、プレイグラウンドのアシスタント エディターで次の効果が確認できます:
1. AB の交点のサイズを計算します2. 色付き部分の開始点を計算します3. ベジェ曲線を使用して色付き部分を描画します4. CAShapeLayer を使用してパスを設定します3番目のステップバイステップベジェ曲線に、レイヤーをAに追加します。
私の個人的な考えですが、ぜひ試してみてください。
は A の
layer.mask
実装を制御できます。マスクは A と B の重複領域です。rect
の塗りつぶしlayer.mask
は、重複領域のpath
を計算することで変更できます。多くのマスキング効果はマスクを使用して実現されます。参考になるコードを書きました。プレイグラウンドで効果を直接確認できます:
リーリー正常に実行されると、プレイグラウンドのアシスタント エディターで次の効果が確認できます:

1. AB の交点のサイズを計算します
2. 色付き部分の開始点を計算します
3. ベジェ曲線を使用して色付き部分を描画します
4. CAShapeLayer を使用してパスを設定します3番目のステップバイステップベジェ曲線に、レイヤーをAに追加します。
私の個人的な考えですが、ぜひ試してみてください。