2014-12-16 19 views
9

Ich versuche einfach, ein perfekt rundes Bild zu erstellen. Hier ist mein SWIFT-Code:Probleme mit UIImageView.layer.cornerRadius, um gerundete Bilder auf verschiedenen Pixeldichten zu erstellen ios

myImage.layer.cornerRadius = myImage.frame.size.width/2 
myImage.layer.masksToBounds = true 

Dies funktioniert auf einem 4s, ist aber nicht ganz rund auf einem 5s, und erscheint als ein Rechteck mit abgerundeten Ecken auf einem iphone 6.

Ich gehe davon aus, dies zu tun hat mit frame.size.width, die Werte in Pixel zurückgibt, keine Punkte oder ähnliches, aber ich konnte dieses Problem nicht lösen.

+1

Wo setzen Sie diesen Code ein? Ich frage mich, ob es vielleicht ein Problem mit dem automatischen Layout ist und das Bild sich ausdehnt, nachdem Sie den Eckenradius entsprechend eingestellt haben ... Wenn es zum Beispiel in 'viewDidLoad' ist, versuchen Sie, es zu' viewDidLayoutSubviews' zu verschieben –

Antwort

23

Wenn Sie‘ Setzen Sie diesen Code in viewDidLoad, versuchen Sie, es auf viewDidLayoutSubviews zu verschieben.

Ich vermute, es ist ein Auto-Layout-Problem - obwohl Sie die Eckenradius-Eigenschaft entsprechend verwendet haben und in der Tat den Bildrahmen kreisförmig machen, nach Auto-Layout bleibt der Eckenradius gleich, aber das Bild streckt sich, so dass es nicht mehr kreisförmig ist.

+0

Wie zeige ich abgerundete UIImage in der UICollection-Ansicht an. Ich lade Bilder in die cellForItemAtIndexPath-Funktion von collectionView von api. – Dashrath

+1

@Dashrath Rufen Sie yourCell.layoutIfNeeded() auf, bevor Sie die Layer-Eigenschaften festlegen. –

+0

Ich habe cell.itemThumb.layer hinzugefügt.cornerRadius = Zelle.itemThumb.frame.size.height/2; cell.itemThumb.clipsToBounds = true; cell.itemThumb.layoutIfNeeded(); aber das Bild zeigt einen abgerundeten Rattangle. vermisse ich wieder etwas? – Dashrath

2

Das Problem ist, dass wenn Sie den CornerRadius von jeder Ansicht ändern und erwarten, dass es wie ein Kreis aussieht, muss die Ansicht ein Quadrat sein.

Aufgrund unterschiedlicher Geräte und unterschiedlicher Gerätegröße kann sich die Größe Ihrer Bildansicht ändern und es kann sich um ein Rechteck handeln.

Für z.B. Wenn Sie sehen eine 50 * 50

myImage.layer.cornerRadius = myImage.frame.size.width/2 

Dies würde Ecke Radios von 25 auf beiden Seiten hinzufügen, um es einen Kreis zu machen.

Aber wegen der automatischen Layout-Gerät ändern, Ihrer Ansicht nach könnte ein 50 * 80

Eckenradius 25 hinzuzufügen wäre, aber als die Höhe 80 ist, wird es 25 auf beiden Seiten hinzufügen, und die restlichen 30 wird keine Kurve sein und geradeaus schauen.

Was können Sie tun, versuchen wird, um den Bildschirm in verschiedenen Ausrichtungen im Storyboard anzeigen und automatisches Layout Einschränkungen ändern (oder Strukturen und Quellen), um sicherzustellen, dass die Bildansicht ein Quadrat in allen Geräten ist

+0

die view.frame size, um den Bildeckenradius festzulegen, also ist das nicht das Problem ... –

+0

Zustimmen, diesen Punkt ignoriert, änderte die Lösung. Vielen Dank. –

0

sollte diese Arbeit:

myImage.layer.cornerRadius = myImage.**bounds**.size.width/2 
myImage.layer.masksToBounds = true 
1
override func viewDidLayoutSubviews() { 
super.viewDidLayoutSubviews() 

    myImage.layer.cornerRadius = myImage.frame.size.width/2 
    myImage.layer.masksToBounds = true 
} 
+0

Sie sollten die Zeile 'super.viewDidLayoutSubviews()' als erste Zeile in der Funktion hinzufügen. – yesthisisjoe

2

Wenn Ihr Code in viewDidLoad in ViewController ist, versuchen Sie es zu viewDidLayoutSubviews bewegen.

Wenn Ihre gerundete imageView in tableViewCell ist, versuchen Sie, sie auf draw zu verschieben.

override func draw(_ rect: CGRect) { 
    avatarView.layer.cornerRadius = avatarView.frame.size.width/2 
    avatarView.layer.masksToBounds = true 
    avatarView.clipsToBounds = true 
    avatarView.contentMode = .scaleAspectFill 
}