27

Android には、9 パッチと呼ばれるストレッチ可能なイメージを定義する優れた方法があります。概念の説明については、これらのドキュメントを参照してください。アイデアは、png 画像を 1 ピクセルの境界線で囲み、画像の伸縮可能な領域とパディングの寸法を定義できるようにすることです。これは非常に素晴らしいので、このアイデアを iPhone アプリで使用したいと思います。UIImage ローダーに独自の 9 パッチを作成する前に、既に存在するかどうかを確認したいと思いました。Google は結果を返さないのであまり期待できませんが、質問しても問題ありませんよね? :-)

編集:皆さん、答えには感謝していますが、については知っていstretchableImageWithLeftCapWidth...ます。@"foo.9.png"パスを取り、伸縮可能を返すコードを探していますUIImage。このコードは間違いなくstretchableImageWithLeftCapWidth...内部で使用されます。私はその方法を使用して自分でコードを書くことができると確信しています。しかし、他の誰かがすでにそれを行っているかどうかを尋ねています。

4

4 に答える 4

25

Tortuga22 ソフトウェアから、そのようなライブラリを作成し、Apache ライセンスの下でリリースしたことを通知する電子メールを受け取りました。

お知らせ: http://blog.tortuga22.com/2010/05/31/announce-tortuga-22-ninepatch/

ソースコード: http://github.com/tortuga22/Tortuga22-NinePatch

使用例:

// loads-and-caches ninepatch and rendered image of requested size
UIImage buttonImg = [TUNinePatchCache imageOfSize:buttonSize 
                                forNinePatchNamed:@"buttonNormalBackground"];
[self.buttonNeedingBackground setImage:buttonImg
                       forControlState:UIControlStateNormal];
于 2010-06-02T16:46:17.240 に答える
4

UIView の contentStretch プロパティも見てください。これは、stretchableImageWithLeftCapWidth よりも堅牢で適切に動作します。基本的には、画像内で伸縮可能な長方形を定義し、スケーリングされた 9 パッチを自動的に作成するだけで機能します。この内部の長方形は何でもかまいません - 画像の中心にある必要さえありません。さらに、 stretchableImage とは異なり、このメソッドはグラフィックを適切に縮小し、照明または光沢のあるグラフィックに対して期待どおりに動作します。これ以上のことを望む実際のアプリケーションは考えられません。

于 2010-08-13T15:53:28.150 に答える
3

はいUIImage、そのようなものをサポートしています。見る

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeightleftCapWidth と topCapHeight のドキュメント

基本的に、画像は左右の端から leftCapWidth ピクセル、上下から topCapHeight ピクセルの領域では引き伸ばされません。画像が拡大縮小されると、これらの制限内の領域が引き伸ばされます。

于 2009-07-16T02:32:39.763 に答える
1

すべてのUIImage画像はこれをネイティブにサポートしています。デフォルトでは画像全体が伸縮可能ですが、leftCapWidthおよびプロパティを使用してキャップを設定したり、メソッドを使用しtopCapHeightて既存のものからキャップを生成したりできます。UIImage- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight

Apple の実装では、これらの値の 1 つまたは両方を設定すると、伸縮可能な領域が強制的に 1 ピクセルの高さ/幅になることに注意してください。

于 2009-08-23T13:45:11.150 に答える