60

UIEdgeInsetsMakeforを使用するアプリを作成していますresizableImageWithCapInsetsが、それがどのように機能するのか正確にはわかりませんUIEdgeInsetsMake.4つの引数があります:

しかし、それらはフロートなので、それを画像に設定する方法がわかりません、ありがとう! :D

4

3 に答える 3

70

ドキュメントによると:

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

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

したがって、関数の値で非伸縮にしたいピクセルの量を使用するだけで済みUIEdgeInsetsMakeます。

21x50 ポイント (標準解像度では 21x50 ピクセル、Retina "@2x" 定義では 42x100 ピクセル) の画像があり、この画像を水平方向に伸縮可能にして、画像を引き伸ばすときに左右の 10 ポイントをそのままにしておくとします。 、ただし、中央の 1 ポイント幅のバンドのみを伸ばします。次に、 を使用しますUIEdgeInsetsMake(0,10,0,10)

それらが浮動小数点数であることを気にしないでください (これは、たとえば、サブピクセル化のサイズ変更に役立ちますが、実際には、おそらく整数 (または小数部分のない浮動小数点数) のみを使用します。

これは iOS5+ のみの方法であり、iOS5 以前では利用できないことに注意してください。iOS5 より前の SDK を使用している場合は、stretchableImageWithLeftCapWidth:topCapHeight:代わりに使用してください。


[編集]構造体のフィールドの順序、および関数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
}];

特に、異なる境界線/方向が混在していないことを確認するために、より読みやすいと思います!

于 2011-10-02T17:40:01.430 に答える
10

でもフロートなので画像に設定する方法がわかりません

これはUIImageインスタンスメソッドです。したがって、resizableImageWithCapInsets画像を作成するために使用する方法は、そのメッセージ画像(UIImage)に送信することから始めることです。

クールな新機能:エッジインセットがすべてゼロの場合、画像は並べて表示されることに注意してください。これは、背景画像を受け入れるものすべての背景として機能します。UIImageViewでも機能します。

于 2011-11-02T16:42:04.783 に答える