この質問への回答はこれです。幅だけが伸び、高さが固定された伸縮可能な画像があるとします(簡単にするため)。
画像の幅は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)で、画像全体が拡大縮小されます。長方形が単位長方形の外側に伸びている場合、結果は未定義です。
これだよ。うまくいけば、他の誰かがこれが役に立ち、開発時間を節約できるでしょう。