2014-12-16 13 views
9

Sto semplicemente cercando di creare un'immagine perfettamente rotonda. Ecco il mio codice swift:problemi con UIImageView.layer.cornerRadius per creare immagini arrotondate su diverse densità di pixel ios

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

Questo funziona su un 4s, ma non è abbastanza rotonda su un 5s, e appare come un rettangolo arrotondato su un iPhone 6.

Sto assumendo questo ha a che fare con frame.size.width restituisce valori in pixel non punti o qualcosa del genere, ma non sono stato in grado di risolvere questo problema.

+1

Dove stai mettendo questo codice? Mi chiedo se forse si tratta di un problema di layout automatico e l'immagine si sta allungando dopo aver impostato correttamente il raggio dell'angolo ... Se è in 'viewDidLoad' ad esempio, prova a spostarlo su' viewDidLayoutSubviews' –

risposta

23

Se si' inserendo il codice in viewDidLoad, prova a spostarlo su viewDidLayoutSubviews.

Immagino che sia un problema di layout automatico - sebbene tu abbia usato la proprietà del raggio dell'angolo in modo appropriato e stia di fatto facendo circolare la cornice dell'immagine, dopo il layout automatico, il raggio dell'angolo rimane lo stesso, ma l'immagine si estende in modo che non sia più circolare.

+0

come visualizzare UIImage arrotondato nella vista UICollection. Sto caricando le immagini nella funzione cellForItemAtIndexPath di collectionView da api. – Dashrath

+1

@Dashrath Chiama yourCell.layoutIfNeeded() prima di impostare le proprietà del livello. –

+0

Ho aggiunto cell.itemThumb.layer.cornerRadius = cell.itemThumb.frame.size.height/2; cell.itemThumb.clipsToBounds = true; cell.itemThumb.layoutIfNeeded(); ma l'immagine fissa mostra un rettangolo arrotondato. mi manca ancora qualcosa? – Dashrath

2

Il problema è che se si modifica la curva Angolo di qualsiasi vista e si aspetta che assomigli a un cerchio, la vista deve essere quadrata.

Ora, a causa dei diversi dispositivi e delle diverse dimensioni del dispositivo, la dimensione della visualizzazione dell'immagine potrebbe cambiare e potrebbe essere un rettangolo.

Ad es. Se si visualizza è un 50 * 50

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

Questo aggiungerebbe radio angolo di 25 su entrambi i lati per renderlo un cerchio.

Ma a causa del layout automatico di cambiamento dispositivo, la vista potrebbe essere un raggio di 50 * 80

angolo sarebbe aggiungere un 25, ma come l'altezza è di 80, si aggiungerà 25 su entrambi i lati, e il restante 30 non sarà una curva e guarderà dritto.

Che cosa si può fare è cercare la visualizzazione dello schermo in vari orientamenti nello storyboard e cambiare vincoli di layout automatico (o le strutture e sorgenti) per garantire che la visualizzazione delle immagini è una piazza di tutti i dispositivi

+0

Ma l'OP non sta usando la dimensione view.frame per impostare il raggio dell'angolo dell'immagine, quindi non è questo il problema ... –

+0

Accetto, Ignorato quel punto, ha cambiato la soluzione. Grazie. –

0

questo dovrebbe funzionare:

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

Dovresti aggiungere la riga 'super.viewDidLayoutSubviews()' come prima riga nella funzione. – yesthisisjoe

2

Se il codice è in viewDidLoad in ViewController, provare a spostarlo a viewDidLayoutSubviews.

Se l'immagine arrotondata è in TableViewCell, provare a spostarla su draw.

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