2013-12-08 16 views
5

Güncel kod maskesi boyutlandırılabilir UIImage ile UIImageView büyüklüğünde. Maske uygulanmış olsa da, self.backgroundImageView, yeniden boyutlandırma kapak insets (BubbleRightCapInsets) ayarlanmış olsa bile, uygun şekilde yeniden boyutlandırılmaz.Maske keyfi

Orjinal Resim:

Original image

Maske görüntü (rightBubbleBackground):

Mask

Sonuç:

Result

this answer'u buldum, ancak yalnızca simetrik görüntüler için çalışıyor. Belki de bu cevabı kullanımım için değiştirebilirim.

+0

Ben mask.frame = 'düşünüyorum self.backgroundImageView.layer.frame; '' mask.frame = self.backgroundImageView.layer.bounds; 'olmalıdır. Kodunuzun kullanılması, katın çerçevesi sınırlara eşit değilse, maskenin kaymasıyla sonuçlanacaktır. – PowerQian

cevap

10

Hatalıydım. Bu cevap asimetrik görüntüler için çalışacak şekilde değiştirilebilir. that answer üzerinde biraz çalıştım ve kendi problemimi çözdüm.

aşağıdaki kod benim kap insets maske katmanı için çalışmak yaptı:

mask.contentsCenter = 
CGRectMake(BubbleRightCapInsets.left/rightBubbleBackground.size.width, 
BubbleRightCapInsets.top/rightBubbleBackground.size.height, 
1.0/rightBubbleBackground.size.width, 
1.0/rightBubbleBackground.size.height); 

Sonuç: Ben

Result

+1

Dostum. TEŞEKKÜR EDERİM!!! – Mahouk

+0

BubbleRightCapInsets'in değeri nedir? Bu UIEdgeInsets KabarcıkRightCapInsets = UIEdgeInsetsMake (15.0f, 20.0f, 15.0f, 20.0f) kullanıyorum; –

+0

@MANCHIKANTIKRISHNAKISHORE Uygulamayı yeniden tasarladım ve artık anıları hatırlamıyorum. Ok 've belki de' dip 'için hesaplamak için' right 'için daha büyük bir değer kullanmalısınız. – duci9y

0

(parçası) Aynı sorun - pikselli katman içeriğinin yani . Benim için CALayer'daki contentScale değerini ayarlayarak çözüldü - bir nedenden dolayı, CALayers'daki varsayılan ölçek, Retina cihazlarında bile her zaman 1.0'dır. Eğer CAShapeLayer kullanarak şekil çizme ve merak ediyorsanız eğer

yani Ayrıca

layer.contentsScale = [UIScreen mainScreen].scale; 

, kenarları retina cihazlarda biraz pürüzlü görünüyor, denemek:

shapeLayer.rasterizationScale = [UIScreen mainScreen].scale; 
shapeLayer.shouldRasterize = YES; 
İlgili konular