2015-05-08 12 views
7

ich den folgenden Code haben die UIImageView in jedem meiner UITableView Zellen haben abgerundete Ecken zu machen:Wie entferne ich eine schwarze Kante auf UIImageView mit abgerundeten Ecken und einer Rahmenbreite?

- (void)awakeFromNib 
{ 
    // Rounded corners. 
    [[cellImage layer] setCornerRadius:([cellImage frame].size.height/2)]; 
    [[cellImage layer] setMasksToBounds:YES]; 
    [[cellImage layer] setBorderColor:[[UIColor whiteColor] CGColor]]; 
    [[cellImage layer] setBorderWidth:3]; // Trouble! 
} 

Ich möchte die Bilder haben ein bisschen eine Lücke zwischen ihnen, und ich dachte Verwendung der machen könnte Randbreite, um das zu ermöglichen. Im Folgenden finden Sie ein Bild von dem, was tatsächlich passiert ist:

list of users with badly rendered rounded corners

Es ist die schwache schwarze Grenze, die ich möchte wissen, wie man loswerden. Ich würde gerne denken, dass es eine Möglichkeit gibt, die Randbreite zu verwenden. Wenn nicht, wäre der beste Ansatz, das Bild selbst zu skalieren und die Randbreite auf 0 zu setzen.

+0

Warum setzen Sie die Grenze überhaupt? – arturdev

+0

Um eine Lücke zwischen den Bildern zu erhalten, berühren Sie die obere und untere Kante – Matthew

+0

. Wie wäre es mit Einstellung: - [[cellImage layer] setBorderColor: [[UIColor clearColor] CGColor]]; – Vizllx

Antwort

5

Anstatt Eckenradius verwenden, können Sie Bezier-Pfad für die Maske, erstellen Sie eine Formebene für diesen Pfad, und geben Sie dann, dass die Formebene erstellen für die Ebenenmaske der Bildansicht:

CGFloat margin = 3.0; 
CGRect rect = CGRectInset(imageView.bounds, margin, margin); 
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(imageView.bounds.size.width/2, imageView.bounds.size.height/2) radius:radius startAngle:0 endAngle:M_PI*2 clockwise:NO]; 
CAShapeLayer *mask = [CAShapeLayer layer]; 
mask.path = path.CGPath; 
imageView.layer.mask = mask; 
+0

Dank @Rob :) Das funktioniert ein Charme http://i.imgur.com/Pw3QqaT.png – Matthew

+1

Obwohl dies funktioniert, empfehle ich die Verwendung von '[UIBezierPath bezierPathWithArcCenter: CGPointMake (imageView.bounds.size.width/2, imageView.bounds.size.height/2) radius: radius startAngle: 0 endAngle: M_PI * 2 im uhrzeigersinn: NO] 'anstelle von' bezierPathWithOvalInRect: ', wie es wahr wird kreisförmige Form (Sie können einige Winkel mit letzterem bemerken). – Rufel

+0

@ Rufel - Einverstanden. – Rob

-1

Was Sie tun, ist, Sie schneiden das Profilbild und den Rand zusammen, was das macht Das Profilbild der Zelle erstreckt sich durch die Grenze.

Sie vermissen diese Zeile: -

cellImage.clipsToBounds = YES; 
+0

Die 'Schicht' hat nicht die Eigenschaft' clipsToBounds'. – Matthew

+0

Danke @MattPotts für die Berichtigung, ich war in Eile ;-) – Vizllx