2012-07-31 15 views
19

Bir CALayer'ım var ve ona gerilebilir bir resim eklemek istiyorum. Sadece yaparsanız: katmanları varsayılan contentGravity beriCALayer.contents'ta Gerilebilir UIImage nasıl eklenir?

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

işe yaramaz kCAGravityResize olduğunu.

Bunun contentCenter kullanılarak gerçekleştirilebileceğini okudum, ancak CALayer'ımdaki gerilmiş görüntüyü elde etmek için bunu tam olarak nasıl kullanacağımı anlayamıyorum.

Herhangi bir fikir kabul edilir!

Horatiu

cevap

33

Bu soruya verilen yanıt budur. Söyleyelim ki, sadece genişlikte uzayan ve yüksekliği sabit olan (sadelik için).

- (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; 
} 
: - (- esnemeyen, 1 piksel esnetilir 15 piksel sabit boyut)

varsayarak tabaka CALayer init yöntemi, bu gibi olmalıdır alt sınıf olan

görüntü 31px genişliğidir

belgelerine göre contentCenter dikdörtgeni 0-1 arasında bir değere sahip olmalıdır.

Birim dikdörtgenin (0.0,0.0) (1.0,1.0) değerine ölçeklendirilerek, ölçeklendirilen görüntünün tamamı elde edilir. Dikdörtgen, birim dikdörtgeninin dışına çıkarsa, sonuç tanımsızdır.

Budur. Umarım bir başkası bunu yararlı bulacaktır ve bazı geliştirme zamanından tasarruf edecektir.

+0

Yardımcı buldum. Teşekkürler! – duci9y

+1

Görüntünün ölçeğini kullanmak daha iyidir. –

+6

Önerilen çözüm, iPhone 6'da artı görüntünün 3x varyantı yoksa başarısız olur. Görüntünün ölçek özelliğini kullanmak daha iyidir. self.contentScale = strechableImage.scale' Sonra görüntünün tüm varyantları (@ 2x @ 3x) mevcut olmasa bile çalışır. –