9
UIImage *aImage = [[UIImage imageNamed:@"Gray_Button.png"] stretchableImageWithLeftCapWidth:25 topCapHeight:0];

「ガラス玉ボタン」を作ってみました。

画像が大きい場合、「ストレッチ」は何をしますか...そして、それを使用しようとしているボタンは...小さいですか?

画像は「伸縮」または「収縮」しますか?

私が尋ねる理由は...私のすべての画像が「D」の形のように見えるからです.

左側は四角く、右側は丸みを帯びています。

D字形は、私が間違っていると何を教えてくれますか? 多すぎる..または少なすぎる...「leftCap設定」?画像が大きすぎる?

4

2 に答える 2

54

leftCapWidthとの両方topCapHeightがゼロでない場合、伸縮可能なイメージは 9 つの部分に分割されます。

     leftCapWidth
      <----->
      +--------------+ ^
      |     | |      | |
      |  A  | |  B   | | topCapHeight
      |-----+·+------| v
      |-----+·+------|
      |  C  | |  D   |
      |     | |      |
      +--------------+

中央部分のサイズは常に 1 ピクセルで、これが引き伸ばされる部分です。次に例を示します。

     leftCapWidth (constant!)
      <----->
      +------------------+ ^
      |     |     |      | |
      |  A  |     |  B   | | topCapHeight (constant!)
    v |-----+ - - +------| v
    | |     .     .      |
    | |     .     .      |
    ^ |-----+ - - +------|
      |  C  |     |  D   |
      |     |     |      |
      +------------------+
            >-----<
        stretched region

「ガラス ピル ボタン」を作成するには、上の領域 A、B、C、および D に丸い境界線を塗りつぶし、そのピルの半径を と の両方に指定する必要がleftCapWidthありtopCapHeightます。


また、伸縮可能な画像は収縮可能ではありません。適用したいボタン (またはその他のもの) よりも大きな伸縮可能な画像を使用しようとすると、正しくレンダリングされない可能性があります (特に古い iOS では)。

于 2010-05-27T20:16:35.113 に答える
3

StretchableImageWithLeftCapWidthは、期待どおりに動作しません。フラストレーションを軽減するために、代わりにUIViewのcontentStretchプロパティを使用することをお勧めします。

参考までに、stretchableImageの動作は次のとおりです。

  • 画像を縮小すると、画像を拡大するのではなく、画像の上部と左側をクリップするだけです。
  • 画像を拡大すると、上部のキャップのすぐ下のピクセルの列と、左側のキャップのすぐ右側のピクセルの行のみが展開されます。これは非常に単純なグラフィックスでは機能しますが、シェーディングやグロスなどの効果を持つグラフィックスでは扱いにくいように見えます。

一方、contentStretchは、期待どおりに動作します。グラフィックは基本的に9つの部分に分割され、ケニーが説明したように拡張および縮小されます。

また、ビューを拡大するときはいつでも、そのcontentModeをUIViewContentModeScaleToFillに設定する必要があることを忘れないでください。

于 2010-08-13T15:27:11.877 に答える