2017-02-27 1 views
0

Je suis en train de faire des images circulaires dans une cellule tableview, j'ai les différentes façons que j'ai vu sur stackoverflow mais est le plus proche, je suis devenu:créer images circulaires pour des images de cellules Tableview

Pics Comme vous pouvez le voir, ils ressemblent plus à des elipses qu'à des cercles. Dans le storyboard j'ai les contraintes définies pour garder le rapport d'aspect 1: 1 et le mode d'affichage "remplissage d'aspect". J'utilise cette extension UIImage pour la forme circulaire:

extension UIImage { 
    var circleMask: UIImage { 
    let square = CGSize(width: min(size.width, size.height), height: min(size.width, size.height)) 
    let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: square)) 
    imageView.contentMode = UIViewContentMode.scaleAspectFill 
    imageView.image = self 
    imageView.layer.cornerRadius = square.width/2 
    imageView.layer.borderColor = UIColor.white.cgColor 
    imageView.layer.borderWidth = 5 
    imageView.layer.masksToBounds = true 
    UIGraphicsBeginImageContext(imageView.bounds.size) 
    imageView.layer.render(in: UIGraphicsGetCurrentContext()!) 
    let result = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return result! 
    } 
} 

Voici comment mon cellForRowAt indexPath ressemble:

let cell = detailTableView.dequeueReusableCell(withIdentifier: castResuseIdentifier) 
    as! CastCell 

    let cast = castArray[indexPath.row] 

    cell.actorName.text = cast.name 
    cell.characterName.text = cast.character 
    cell.actorProfileImage.image = castImageArray[indexPath.row].circleMask 

    self.detailTableView.rowHeight = 100 
    detailTableView.allowsSelection = true 

    return cell 

Je ne sais pas pourquoi ils ne sont pas des cercles parfaits, une idée?

+0

essayé, il est tout simplement ressembler à des carrés avec des bords arrondis – SwiftyJD

+0

Désolé, je réalisai mon précédent commentaire n » était pas t droite donc je l'ai supprimé. BTW, avez-vous essayé ceci: http://stackoverflow.com/a/39515254/58129? –

+0

Êtes-vous sûr que 'circleMask' n'est appelé que lorsque la mise en page est terminée? – Ssswift

Répondre

1

Il s'agit d'une manière vraiment non performante de réaliser cet effet, puisque vous créez un UIImageView et que vous le placez dans un contexte d'image distinct à chaque fois.

Pour une manière rapide et facile de le faire, il suffit de définir la propriété cornerRadius pour la couche de la vue actorProfileImage à l'intérieur de votre CastCell.

0

En n'utilisant l'extension et au lieu d'ajouter ceci aux cellForRowAtIndexPath les images est sorti circulaire

cell.actorProfileImage.layer.cornerRadius = cell.actorProfileImage.frame.size.height/2 
    cell.actorProfileImage.clipsToBounds = true 
    cell.actorProfileImage.layer.masksToBounds = true