2013-12-08 13 views
5

Aktuelle Code-Maske:Mask Größe UIImageView beliebig veränderbare UIImage

self.backgroundImageView.image = [self.message imageOfSize:self.message.size]; // Random image, random size 

    UIImage *rightBubbleBackground = [[UIImage imageNamed:@"BubbleRight"] 
    resizableImageWithCapInsets:BubbleRightCapInsets 
    resizingMode:UIImageResizingModeStretch]; 

    CALayer *mask = [CALayer layer]; 
    mask.contents = (id)[rightBubbleBackground CGImage]; 

    mask.frame = self.backgroundImageView.layer.frame; 
    self.backgroundImageView.layer.mask = mask; 
    self.backgroundImageView.layer.masksToBounds = YES; 

Dies funktioniert nicht richtig. Obwohl die Maske angewendet wird, wird die rightBubbleBackground Größe nicht korrekt angepasst, um self.backgroundImageView zu passen, obwohl es Größenänderung Cap-Einfügungen (BubbleRightCapInsets) festgelegt hat.

Originalbild:

Original image

Maskenbild (rightBubbleBackground):

Mask

Ergebnis:

Result

Ich fand this answer, aber es funktioniert nur für symmetrische Bilder. Vielleicht könnte ich diese Antwort für meine Verwendung ändern.

+0

Ich denke 'mask.frame = self.backgroundImageView.layer.frame; 'sollte' maske.frame = self.backgroundImageView.layer.bounds '' sein. Wenn Sie den Code verwenden, wird die Maske verschoben, wenn der Rahmen der Ebene nicht den Grenzen entspricht. – PowerQian

Antwort

10

Ich lag falsch. Diese Antwort kann geändert werden, um für asymmetrische Bilder zu arbeiten. Ich arbeitete an that answer ein bisschen und löste mein eigenes Problem.

Der folgende Code hat meine Kappe Einsätze für die Maskenschicht arbeiten:

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

Ergebnis:

Result

+1

Alter. DANKE!!! – Mahouk

+0

was ist der Wert von BubbleRightCapInsets .. ich benutze diese UIEdgeInsets BubbleRightCapInsets = UIEdgeInsetsMake (15.0f, 20.0f, 15.0f, 20.0f); –

+0

@MANCHIKANTIKRISHNAKISHORE Ich habe die App seither überarbeitet und erinnere mich nicht mehr an die Einschübe. Sie sollten jedoch einen größeren Wert für "rechts" verwenden, um den Pfeil und vielleicht auch "unten" zu berücksichtigen. – duci9y

0

I (Teil) das gleiche Problem hatte - also die verpixelten Schicht Inhalt . Für mich wurde es gelöst, indem der contentsScale-Wert auf dem CALayer gesetzt wurde - aus irgendeinem Grund ist die Standardskalierung bei CALayers immer 1,0, sogar auf Retina-Geräten.

dh

layer.contentsScale = [UIScreen mainScreen].scale; 

Auch, wenn Sie eine Form sind Zeichnung CAShapeLayer mit und fragen, schauen ihren Rändern ein wenig auf Retina-Geräten gezackt, versuchen:

shapeLayer.rasterizationScale = [UIScreen mainScreen].scale; 
shapeLayer.shouldRasterize = YES; 
Verwandte Themen