web-dev-qa-db-fra.com

Comment mettre l'image en cercle rapidement

Comment puis-je créer une image circulaire avec Swift?

Mon ViewController:

import UIKit
import Foundation

class FriendsViewController : UIViewController{

    @IBOutlet weak var profilPicture: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
    }
}

Mon profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100)) ne fait rien ..

Exemple: http://www.appcoda.com/ios-programming-circular-image-calayer/

58
Pixel
import UIKit

class ViewController: UIViewController {
  @IBOutlet weak var image: UIImageView!

  override func viewDidLoad() {
    super.viewDidLoad()

    image.layer.borderWidth = 1
    image.layer.masksToBounds = false
    image.layer.borderColor = UIColor.black.cgColor
    image.layer.cornerRadius = image.frame.height/2
    image.clipsToBounds = true
}

C'est tout ce dont vous avez besoin ...

161
Jon

Vous pouvez simplement créer une extension:

import UIKit

extension UIImageView {

   func setRounded() {
      let radius = CGRectGetWidth(self.frame) / 2
      self.layer.cornerRadius = radius
      self.layer.masksToBounds = true
   }
}

et utilisez-le comme ci-dessous:

imageView.setRounded()
33
Daniel Kuta

Basé sur la réponse de @DanielQ

Swift 4 et Swift 3

import UIKit

extension UIImageView {

    func setRounded() {
        self.layer.cornerRadius = (self.frame.width / 2) //instead of let radius = CGRectGetWidth(self.frame) / 2
        self.layer.masksToBounds = true
    }
}

Vous pouvez l’utiliser dans n’importe quelle ViewController avec:

imageView.setRounded()
11
MrMins

Si vous voulez dire que vous voulez faire une circulaire UIImageView dans Swift, vous pouvez simplement utiliser ce code:

imageView.layer.cornerRadius = imageView.frame.height / 2
imageView.clipsToBounds = true
10
Tom Spee

Je ne sais pas si cela aide quelqu'un mais je me débattais avec ce problème pendant un moment, aucune des réponses en ligne ne m'aidant. Pour moi, le problème était que différentes hauteurs et largeurs étaient définies sur l’image dans le scénarimage. J'ai essayé chaque solution sur pile et il s'est avéré que c'était quelque chose d'aussi simple que cela. Une fois que je les ai réglés tous les deux sur 200, mon image de profil de cercle était parfaite. C'était le code alors dans mon VC.

profileImage2.layer.cornerRadius = profileImage2.frame.size.width/2
    profileImage2.clipsToBounds = true
6
Grace

Pour Swift 4 :

import UIKit

extension UIImageView {

func makeRounded() {
    let radius = self.frame.width/2.0
    self.layer.cornerRadius = radius
    self.layer.masksToBounds = true
   }
}
4
Ghulam Rasool

Toutes les réponses ci-dessus ne pouvaient pas résoudre le problème dans mon cas. Ma ImageView a été placée dans une UITableViewCell personnalisée. J'ai donc aussi appelé la méthode layoutIfNeeded() à partir d'ici. Exemple:

 class NameTableViewCell:UITableViewCell,UITextFieldDelegate { ...

 override func awakeFromNib() {

    self.layoutIfNeeded()
    profileImageView.layoutIfNeeded()

    profileImageView.isUserInteractionEnabled = true
    let square = profileImageView.frame.size.width < profileImageView.frame.height ? CGSize(width: profileImageView.frame.size.width, height: profileImageView.frame.size.width) : CGSize(width: profileImageView.frame.size.height, height:  profileImageView.frame.size.height)
    profileImageView.addGestureRecognizer(tapGesture)
    profileImageView.layer.cornerRadius = square.width/2
    profileImageView.clipsToBounds = true;
}
2
Nazar Medeiros
struct CircleImage: View {
    var image: Image

    var body: some View {
        image
           .clipShape(Circle())
    }
}

Ceci est correct pour SwiftUI

1
Michal Rogowski

Vous devez d’abord définir une largeur et une hauteur égales pour obtenir Circular ImageView.Vous trouverez ci-dessous la largeur et la hauteur 100 000. Si vous souhaitez définir une largeur et une hauteur égales en fonction de la taille souhaitée, définissez-la ici.

 var imageCircle = UIImageView(frame: CGRectMake(0, 0, 100, 100))

Ensuite, vous devez définir la hauteur/2 pour le rayon de coin 

 imageCircle.layer.cornerRadius = imageCircle.frame.size.height/2
 imageCircle.layer.borderWidth = 1
 imageCircle.layer.borderColor = UIColor.blueColor().CGColor
 imageCircle.clipsToBounds = true
 self.view.addSubview(imageCircle)
1
user3182143

Pour les développeurs Swift3/Swift4:

let radius = yourImageView.frame.width / 2
yourImageView.layer.cornerRadius = radius
yourImageView.layer.masksToBounds = true
1
Achintya Ashok

Cette méthode est la solution la moins coûteuse et maintient toujours la vue de votre image arrondie:

class RoundedImageView: UIImageView {

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

        clipsToBounds = true
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        clipsToBounds = true
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        assert(bounds.height == bounds.width, "The aspect ratio isn't 1/1. You can never round this image view!")

        layer.cornerRadius = bounds.height / 2
    }
}

Les autres réponses vous disent d’arrondir les vues en fonction des calculs de cadre définis dans une méthode UIViewControllers viewDidLoad(). Ce n'est pas correct , car il n'est pas sûr de ce que sera l'image finale.

0
J. Doe

Téléchargez et utilisez Toucan de GitHub. C'est offert dans Swift. Esprit engourdissant facile. Il offre également un tas d'autres effets d'image. 

0
user3286381

Si votre image est arrondie, elle aura une hauteur et une largeur exactement identiques (c'est-à-dire 120). Vous prenez simplement la moitié de ce nombre et l’utilisez dans votre code (image.layer.cornerRadius = 60).

0
Raul Gutierrez
// code to make the image round


import UIKit

extension UIImageView {
public func maskCircle(anyImage: UIImage) {


    self.contentMode = UIViewContentMode.ScaleAspectFill
    self.layer.cornerRadius = self.frame.height / 2
    self.layer.masksToBounds = false
    self.clipsToBounds = true




    // make square(* must to make circle),
    // resize(reduce the kilobyte) and
    // fix rotation.
    //        self.image = prepareImage(anyImage)
}
}

// appeler la fonction depuis le contrôleur de vue

self.imgCircleSmallImage.maskCircle(imgCircleSmallImage.image!)
0
Ullas Kumar