21

CALayerがあり、それにストレッチ可能な画像を追加したいと思います。私がするだけなら:

        _layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage;

レイヤーのデフォルトのcontentGravityはkCAGravityResizeであるため、機能しません。

これはcontentsCenterを使用して実現できることを読みましたが、CALayerで引き伸ばされた画像を実現するためにこれをどのように正確に使用するかがわかりません。

どんなアイデアでも大歓迎です!

ホラティウ

4

1 に答える 1

34

この質問への回答はこれです。幅だけが伸び、高さが固定された伸縮可能な画像があるとします(簡単にするため)。

画像の幅は31pxです(15pxの固定サイズ-引き伸ばされません-、1pxは引き伸ばされます)

レイヤーがCALayerサブクラスであるとすると、initメソッドは次のようになります。

    - (id)init
{
    self = [super init];
    if (self) {
        UIImage *stretchableImage = (id)[UIImage imageNamed:@"stretchableImage.png"];
        self.contents = (id)stretchableImage.CGImage;

        self.contentsScale = [UIScreen mainScreen].scale; //<-needed for the retina display, otherwise our image will not be scaled properly

        self.contentsCenter = CGRectMake(15.0/stretchableImage.size.width,0.0/stretchableImage.size.height,1.0/stretchableImage.size.width,0.0/stretchableImage.size.height);
    }
    return self;
}

ドキュメントによると、contentsCenterの長方形の値は0から1の間でなければなりません。

デフォルトは単位長方形(0.0,0.0)(1.0,1.0)で、画像全体が拡大縮小されます。長方形が単位長方形の外側に伸びている場合、結果は未定義です。

これだよ。うまくいけば、他の誰かがこれが役に立ち、開発時間を節約できるでしょう。

于 2012-08-13T04:23:44.043 に答える