1. ホーム
  2. ios

[解決済み] UIEdgeInsetsMakeはどのように機能するのですか?

2022-02-19 10:08:13

質問事項

アプリを作っているのですが、その中で UIEdgeInsetsMake に対して resizableImageWithCapInsets が、具体的にどのように動作するのかがわからない。 UIEdgeInsetsMake は4つの引数を持ちます。

  • トップ

でも、floatだから画像に設定する方法がわからない!ありがとうございます。:D

どのように解決するのですか?

ドキュメントによると

このメソッドは、画像にキャップインセットを追加したり、画像の既存のキャップインセットを変更するために使用します。どちらの場合も、新しい画像が返され、元の画像はそのまま残ります。

画像の拡大・縮小の際、キャップで覆われた領域は拡大・縮小されません。代わりに、各方向のキャップで覆われていないピクセル領域が、左から右、上から下へと並べられ、画像のサイズが変更されます。この手法は、可変幅のボタンを作成する際によく使われます。角の丸みはそのままに、中央の領域が必要に応じて拡大・縮小されます。最高のパフォーマンスを得るには、1x1ピクセルの大きさのタイル状の領域を使用してください。

つまり、伸縮不可にしたいピクセル数だけを UIEdgeInsetsMake 関数を使用します。

例えば、21x50ポイントの画像(標準画質では21x50ピクセル、Retina "@2x"画質では42x100ピクセル)があり、この画像を水平方向に伸縮させ、左と右の10ポイントはそのままで、真ん中の1ポイント幅の帯のみを伸縮させたいとします。その場合、次のようにします。 UIEdgeInsetsMake(0,10,0,10) .

浮動小数点数であることは気にしないでください(たとえばサブピクセルサイズの変更には便利ですが、実際にはおそらく整数(または小数部のない浮動小数点数)しか使わないでしょう)。

これはiOS5+限定の方法で、iOS5以前では利用できないので注意しましょう。もしiOS5以前のSDKを使用している場合は stretchableImageWithLeftCapWidth:topCapHeight: の代わりに


[EDIT]いくつかのヒント のフィールドの順番を覚えていないため、以前から使用しています。 UIEdgeInsets 構造体の引数は、どのような順番で UIEdgeInsetsMake 関数 - 私は という構文があります。 このように

UIEdgeInsets insets = { .left = 50, .right = 50, .top = 10, .bottom = 10 };

または、明示的なキャストが必要な場合。

UIImage* rzImg = [image resizableImageWithCapInsets:(UIEdgeInsets){
   .left = 50, .right = 50,
   .top = 10, .bottom = 10
}];

特に、異なるボーダー/ディレクションを混在させないようにすることが、より読みやすいと思います