Je veux montrer une image dans imageVoir comme le contact d'image (dans un cercle) Mais quand j'essaie de montrer cela, l'imageView redimensionne sa taille et cela ne s'affiche pas correctement dans un cercle.
image.layer.borderWidth=1.0
image.layer.masksToBounds = false
image.layer.borderColor = UIColor.whiteColor().CGColor
image.layer.cornerRadius = image.frame.size.height/2
image.clipsToBounds = true
Je veux montrer comme ça:
Mais je comprends ceci:
Comment cette image peut-elle être redimensionnée à la taille UIImageView pour s'afficher comme un cercle?
Merci!
Quelle taille frame
utilisez-vous pour image
? Je peux obtenir un cercle parfait si je règle le cadre comme un carré.
let image = UIImageView(frame: CGRectMake(0, 0, 100, 100))
C'est la solution que j'ai utilisée dans mon application:
var image: UIImage = UIImage(named: "imageName")
imageView.layer.borderWidth = 1.0
imageView.layer.masksToBounds = false
imageView.layer.borderColor = UIColor.whiteColor().CGColor
imageView.layer.cornerRadius = image.frame.size.width/2
imageView.clipsToBounds = true
Swift 4.0
let image = UIImage(named: "imageName")
imageView.layer.borderWidth = 1.0
imageView.layer.masksToBounds = false
imageView.layer.borderColor = UIColor.white.cgColor
imageView.layer.cornerRadius = image.frame.size.width / 2
imageView.clipsToBounds = true
RapideetSimplesolution.
Comment masquer UIImage
Cercle sans recadrer avec Swift.
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 = anyImage
}
}
Comment appeler:
let anyAvatarImage:UIImage = UIImage(named: "avatar")!
avatarImageView.maskCircle(anyAvatarImage)
Je suggère de faire de votre fichier image un carré parfait pour commencer. Cela peut être fait dans presque n'importe quel programme de retouche photo. Après cela, cela devrait fonctionner dans viewDidLoad. Crédit à ceci vidéo
image.layer.cornerRadius = image.frame.size.width/2
image.clipsToBounds = true
C'est tout ce dont vous avez besoin ...
profilepic = UIImageView(frame: CGRectMake(0, 0, self.view.bounds.width * 0.19 , self.view.bounds.height * 0.1))
profilepic.layer.borderWidth = 1
profilepic.layer.masksToBounds = false
profilepic.layer.borderColor = UIColor.blackColor().CGColor
profilepic.layer.cornerRadius = profilepic.frame.height/2
profilepic.clipsToBounds = true
slider.addSubview(profilepic)
Créez votre cercle personnalisé UIImageView et créez le cercle sous layoutSubviews si vous utilisez Autolayout.
/*
+-------------+
| |
| |
| |
| |
| |
| |
+-------------+
The IMAGE MUST BE SQUARE
*/
class roundImageView: UIImageView {
override init(frame: CGRect) {
// 1. setup any properties here
// 2. call super.init(frame:)
super.init(frame: frame)
// 3. Setup view from .xib file
}
required init?(coder aDecoder: NSCoder) {
// 1. setup any properties here
// 2. call super.init(coder:)
super.init(coder: aDecoder)
// 3. Setup view from .xib file
}
override func layoutSubviews() {
super.layoutSubviews()
self.layer.borderWidth = 1
self.layer.masksToBounds = false
self.layer.borderColor = UIColor.white.cgColor
self.layer.cornerRadius = self.frame.size.width/2
self.clipsToBounds = true
}
}
reviewerImage.layer.cornerRadius = reviewerImage.frame.size.width / 2;
reviewerImage.clipsToBounds = true
Je l'ai corrigé en modifiant la vue:
Cela fonctionne parfaitement
essayez ceci . Swift code
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
perform(#selector(self.setCircleForImage(_:)), with: pickedImage, afterDelay: 0)
}
@objc func setCircleForImage(_ imageView : UIImageView){
imageView.layer.cornerRadius = pickedImage.frame.size.width/2
imageView.clipsToBounds = true
}
ce que j’ai découvert, c’est que la largeur et la hauteur de la vue d’image doivent renvoyer un nombre pair lorsqu’elles sont divisées par 2 pour obtenir un cercle parfait, par exemple.
let image = UIImageView(frame: CGRectMake(0, 0, 120, 120))
cela ne devrait pas être quelque chose comme let image = UIImageView (cadre: CGRectMake (0, 0, 130, 130))
J'ai eu un résultat similaire (plus d'un ovale qu'un cercle). Il s’est avéré que les contraintes que j’ai imposées à la variable UIImageView
l’ont forcée à former un ovale au lieu d’un cercle. Après avoir résolu ce problème, les solutions ci-dessus ont fonctionné.
Si vous utilisez une UIViewController
, voici comment procéder avec Anchors . La clé consiste à définir le layer.cornerRadius
de l'imageView dans viewWillLayoutSubviews
comme suit:
override func viewWillLayoutSubviews(){
imageView.layer.cornerRadius = imageView.frame.size.width / 2
}
Assurez-vous également que les heightAnchor
et widthAnchor
ont la même taille. Ils sont tous les deux 100
dans mon exemple ci-dessous
Code:
let imageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.layer.borderWidth = 1.0
imageView.clipsToBounds = true
imageView.layer.borderColor = UIColor.white.cgColor
return imageView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(imageView)
imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 50).isActive = true
imageView.image = UIImage(named: "pizzaImage")
}
override func viewWillLayoutSubviews() {
imageView.layer.cornerRadius = imageView.frame.size.width / 2
}
Si vous utilisez un CollectionView Cell
, définissez le layer.cornerRadius
de l'imageView dans layoutSubviews()
:
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(imageView)
imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
imageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 50).isActive = true
imageView.image = UIImage(named: "pizzaImage")
}
override func layoutSubviews() {
super.layoutSubviews() // call super.layoutSubviews()
imageView.layer.cornerRadius = imageView.frame.size.width / 2
}
Utilisez ce code pour rendre l'image ronde
self.layoutIfNeeded()
self.imageView.layer.cornerRadius =
self.imageView.frame.width/2
self.imageView.layer.masksToBounds = true
Cela fonctionne parfaitement pour moi . L'ordre des lignes est important
func circularImage(photoImageView: UIImageView?)
{
photoImageView!.layer.frame = CGRectInset(photoImageView!.layer.frame, 0, 0)
photoImageView!.layer.borderColor = UIColor.grayColor().CGColor
photoImageView!.layer.cornerRadius = photoImageView!.frame.height/2
photoImageView!.layer.masksToBounds = false
photoImageView!.clipsToBounds = true
photoImageView!.layer.borderWidth = 0.5
photoImageView!.contentMode = UIViewContentMode.ScaleAspectFill
}
Comment utiliser:
@IBOutlet weak var photoImageView: UIImageView!
...
...
circularImage(photoImageView)
Cela fonctionne aussi pour moi. Pour un résultat de cercle parfait, utilisez la même taille pour la largeur et la hauteur. comme image.frame = CGRect(0,0,200, 200)
Pour un cercle non parfait, la largeur et la hauteur ne doivent pas être égales à celles décrites ci-dessous.
image.frame = CGRect(0,0,200, 160)
image.layer.borderColor = UIColor.whiteColor().CGColor
image.layer.cornerRadius = image.frame.size.height/2
image.layer.masksToBounds = false
image.layer.clipsToBounds = true
image.contentMode = .scaleAspectFill
Essayez ceci, c'est un travail pour moi,
définir imageView largeur et hauteur identiques.
Rapide
imageview?.layer.cornerRadius = (imageview?.frame.size.width ?? 0.0) / 2
imageview?.clipsToBounds = true
imageview?.layer.borderWidth = 3.0
imageview?.layer.borderColor = UIColor.white.cgColor
Objectif c
self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2;
self.imageView.clipsToBounds = YES;
self.imageView.layer.borderWidth = 3.0f;
self.imageView.layer.borderColor = [UIColor whiteColor].CGColor;
J'espère que cela aidera quelqu'un.