2017-09-13 24 views
0

CGImageにはどのようにUIEdgeInsets(またはそのバリエーション)が適用されますか?これは私が最終的に達成しようとしているものですが、CGImageに変換される前に、CGImageUIImageに適用された下側のインセットを認識しません。CGImageにUIEdgeInsetsを適用するには?

var image = someUIImage 
image = image.withAlignmentRectInsets(UIEdgeInsets(top: 0, left: 0, bottom: (image.size.height/2), right: 0)) 
let imageCG: CGImage = image.cgImage! 
layer.contents = imageCG 


そして、私は(ここに見られるように)直接CGImageにインセットを適用することはできません。

let image = someUIImage.cgImage! 
image. // can't apply any inset here 
layer.contents = image 

回避策?

+0

UIViewまたはそのサブクラスで正しく表示することができますか? – dfd

+0

残念ながら、CGImageは、この特定のデリゲートメソッドが必要とするものです(イメージはマップ上の注釈として使用されています)ので、私はほとんど動揺しません。 – sconewolf

+0

私は実際に今日の午後にいくつかのコードを使って作業しています。私は 'UIView'を回すコードを持っていて、それはサブビューをUIImageに変換しています。今私は特定のサイズを反映するために、そのイメージ(実際にはマスクです)のサイズを変更/トリミング/スケールする必要があります。 IMHOは、 'UIImge'を持っていれば、' CGImage'(またはこれと逆の、私が今作業しているもの)に変更します。これはコードの1行です。これはあなたのために働くと思いますか? (1)すべてのインセットを取得し、ビューに設定します。 (2)適切なサイズのビューのスケーリングされたイメージを作成します。もしそうなら、私が終わったら(うまくいけば今日)私は完全なコードを投稿します。 – dfd

答えて

0

は、この方法を試してみてください:

はサイズ変更可能= img.resizableImageてみましょう(:UIEdgeInsets(上:withCapInsets 8を、左:8を、下:8、右:8)、resizingMode:.stretch)

+0

残念ながら、インセットは 'CGImage'に引き継がれません。 – sconewolf

1

あなたはCGImageにはalignmentRectInsetsプロパティがないため、CGImageに「UIEdgeInsetsを適用する」ことはできません。 UIImageには、を含むCGImageにないいくつかのプロパティが格納されています。

alignmentRectInsetsプロパティは、自動レイアウトがイメージを含むUIImageViewにどのように影響するかに影響します。 UIImageViewalignmentRectInsetsalignmentRectInsetsからUIImageに設定します。自動レイアウトでは、UIImageViewのフレームを計算するときに整列矩形を使用します。

CALayerには、alignmentRectInsetsプロパティが不要です。自動レイアウトはレイヤーでは機能しません。

つまり、あなたが求めていることは、実際には意味がありません。

あなたが望む視覚効果を説明するために質問を修正した場合、それを入手する方法についてアドバイスを提供することができます。

+0

非常によく説明されて:)私はUIImageViewがUIImageからalignmentRectInsetsを取ることを知りませんでした!したがって+1。 –

+0

詳細な回答をいただきありがとうございます。私は非常に役に立ちました。私が望む視覚効果は単に 'CGImage'にボトムマージンを適用することです。できるだけ標準の 'UIImage'を使用しますが、このイメージは' CGImage'タイプのマップ上の注釈になります。 – sconewolf

関連する問題