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/
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 ...
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()
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()
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
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
Pour Swift 4 :
import UIKit
extension UIImageView {
func makeRounded() {
let radius = self.frame.width/2.0
self.layer.cornerRadius = radius
self.layer.masksToBounds = true
}
}
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;
}
struct CircleImage: View {
var image: Image
var body: some View {
image
.clipShape(Circle())
}
}
Ceci est correct pour SwiftUI
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)
Pour les développeurs Swift3/Swift4:
let radius = yourImageView.frame.width / 2
yourImageView.layer.cornerRadius = radius
yourImageView.layer.masksToBounds = true
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 UIViewController
s viewDidLoad()
. Ce n'est pas correct , car il n'est pas sûr de ce que sera l'image finale.
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.
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).
// 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!)