7

私はUIImageView動的に(URLから)画像を設定しています。画像のサイズ/アスペクト比は任意です。Aspect Fillに設定contentModeし、ビューのレイヤーclipsToBoundsをに設定していますがYES、正しく表示されています。ただし、画像ビューの下に影も表示したいと思います。画像ビューのレイヤーに影を設定するとき、影を表示するように設定clipsToBoundsする必要がありNOます。これにより、ビューからの画像のにじみ部分が表示されます。画像ビューのサイズを一定 (アスペクト フィル) に保ち、同時にシャドウを有効にするにはどうすればよいですか?

1つのオプションには、グラフィックスコンテキストを作成し、そのコンテキストに画像を再描画し、目的のアスペクト比で画像を取得し、その画像を画像ビューの画像として設定することが含まれますが、それは余分な処理であり、CPU/GPU と通常の世界の両方を無駄にします時間(特に、大きな画像を含む画像ビューが多数ある場合)。

別のオプションとして、画像ビューと同じサイズの空白のビューを作成し、それをスーパービューのビューの下に挿入し、制約を使用してビューに動的にアタッチし、そのビューのレイヤーでシャドウを有効にすることが含まれます。これには、シャドウのためだけに追加のビューを作成することも含まれます。おそらく最初のソリューションよりも優れた/より効率的なソリューションですが、それでも余分な作業が必要です (CPU に関して)。

私の条件下でシャドウとアスペクト フィッティングの両方を有効にできる追加作業を必要としないオプションはありますか?

4

1 に答える 1

2

2番目のオプションと比較して最適であると私が信じる1つの解決策は、

画像を表示するだけで、その上に userInteraction がない場合は、2 つのCALayerインスタンスを使用してそれを実現できます。

ユーザー インタラクションも必要な場合は、 one UIViewand one CALayer.

2 つの CALayer インスタンスを使用 ->

  • 2 つのレイヤーを作成します。maskToBounds=YES で画像を保存および表示する 1 つのレイヤー。を使用して、このレイヤーに画像を設定しますcontents property
  • そして、シャドウとclipToBounds = YESを追加する2番目のCALayerにsubLayerとして上のレイヤーを追加します。

上記はAppleによって提案されています。彼ら自身の言葉で->

シャドウだけでなく境界マスキングも使用する場合は、1 つではなく 2 つのレイヤーを使用します。コンテンツを含むレイヤーにマスクを適用し、そのレイヤーを、シャドウ効果が有効になっているまったく同じサイズの 2 番目のレイヤー内に埋め込みます。

このリンクを確認してください。そして、上記の用語を検索します。

于 2014-03-20T12:54:20.563 に答える