web-dev-qa-db-fra.com

Définir des coins arrondis sur UIimage dans UICollectionViewCell en rapide

J'ai un problème simple auquel je ne trouve pas de solution sur Google, la documentation ou ici.

J'ai un Collectionview dans mon contrôleur de vue. J'ai créé une cellule personnalisée, DescriptionCell, qui contient un UIImage. Je veux que cette image ait des coins arrondis. Cependant, je ne sais pas où placer le cornerradius sur la couche UIImage. J'ai essayé dans la méthode awakeFromNib des cellules, dans la méthode déléguée CellForRowAtIndexPath et substitué LayoutSubview dans la cellule mais cela ne fonctionne pas . Où dois-je placer le code pour définir le rayon de UIImage?

Pour préciser, je sais comment créer des coins arrondis d'un UIImage. Mais s'il s'agit d'une sous-vue d'une cellule Collectionview, je ne sais pas où définir le cornerradius.

Voici le code pour ma descriptionCell

class DescriptionCell: UICollectionViewCell {
    @IBOutlet weak var mImage: UIImageView!

    override func awakeFromNib() {
    //mImage.layer.cornerradius = 5 
    //Does not work, the image is still square in the cell
    }

Et dans le cellforRowAtIndePath

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("descriptioncell", forIndexPath: indexPath) as! DescriptionCell
    //cell.mImage.layer.cornerradius = 5 
    //Does not work, the image is still square in the cell
return cell    
}

Merci d'avance!

13
Jell92

Eh bien, vous utilisez une partie du code de la réponse que vous avez utilisée… .. L’autre partie est imageView.clipsToBounds = true

Mettez à jour votre awakeFromNib comme ceci:

override func awakeFromNib() {
    mImage.layer.cornerRadius = 5 
    mimage.clipsToBounds = true
}

Pour en faire un cercle, vous devez définir cornerRadius sur la moitié de la hauteur carrée. Dans votre cellForItemAtIndexPath, ajoutez ces lignes:

cell.layoutIfNeeded()
cell.mImage.layer.cornerRadius = cell.mImage.frame.height/2

Mettre à jour

Pour éviter que layoutSubviews soit appelé deux fois, remplacez layoutSubviews dans votre classe DescriptionCell et mettez le code à cet endroit:

override func layoutSubviews() {
    super.layoutSubviews()
    layoutIfNeeded()
    mImage.layer.cornerRadius = mImage.frame.height/2
}
19
Sam_M

Avez-vous essayé de l'insérer dans la fonction init de UICollectionViewCell personnalisée?

override init(frame: CGRect) {
    super.init(frame: frame)

    image.layer.masksToBounds = true
    image.layer.cornerRadius = 10
}
1
Hama