2017-08-24 5 views
0

Comment est-ce que je peux définir l'image UIButton, quelle image est ronde avec la bordure j'écris le code lié mais l'image n'a pas la forme ronde appropriée. ..Comment est-ce que je peux définir l'image UIButton, quelle image est ronde avec la bordure

btnMyProfile.setImage(UIImage(named: "MyDefaultImg.png"), for: .normal) 
    btnMyProfile.imageView?.contentMode = .scaleAspectFit 
    btnMyProfile.imageView?.layer.cornerRadius = (btnMyProfile.imageView?.frame.width)!/2 
    btnMyProfile.imageView?.layer.borderColor = UIColor.blue.cgColor 
    btnMyProfile.imageView?.layer.borderWidth = 2.0 

Mon apparence o/p comme ça .. enter image description here

Mais j'ai besoin comme ça .. enter image description here

Que puis-je faire pour obtenir ma sortie désirée? S'il vous plaît aidez-moi .. Merci à l'avance ..

Répondre

2

mis clipsToBounds = true pour votre imageview

btnMyProfile.imageView.clipsToBounds = true 

ou utiliser

btnMyProfile.imageView.layer.masksToBounds = true 

De l'apple docs:

Par défaut, le coin le rayon ne s'applique pas à l'image dans la propriété de contenu de la couche ; il s'applique uniquement à la couleur de l'arrière-plan et à la bordure du calque . Cependant, définir la propriété masksToBounds sur true provoque le découpage du contenu dans les coins arrondis.

autre une autre option utiliser UIBezierPath

+0

J'ai changé mais pas d'effet .. – NiravS

+0

@NiravS - vérifier la réponse mise à jour –

+0

Je change la taille de mon bouton en carré afin que le rond parfait soit visible mais j'ai besoin de mettre une petite image dans mon bouton. Alors, comment puis-je faire? – NiravS

0
func roundedImageView(imgView: UIImageView, borderWidth: Float, borderColor: UIColor) 
{ 
    imgView.layer.cornerRadius = imgView.frame.size.width/2 
    imgView.clipsToBounds = true 
    imgView.layer.borderWidth = CGFloat(borderWidth) 
    imgView.layer.borderColor = borderColor.cgColor 
} 
+0

Mais j'ai besoin de la grande taille du bouton (forme Rectangle) c'est pourquoi donner une forme arrondie à la vue de l'image – NiravS

+0

vérifier avec mise à jour code –

0

vous pouvez définir votre taille d'image et la largeur est la même.

comme

20X20, 30X30 ..

0

si vous voulez deuxième type de sortie, vous devez réduire la taille de l'image. (Par exemple, ou 40x40 32x32) et au lieu de vous faire
btnMyProfile.imageView?.layer.cornerRadius = (btnMyProfile.imageView?.frame.width)!/2
devriez faire

btnMyProfile.imageView?.layer.cornerRadius = image.size.width/2 

le reste de votre code semble OK ..

0

J'atteins d ma sortie désirée à l'aide de @Anbu & également basée sur la réponse de @ A.Jam .. Voici mon code correct ..

let img = UIImageView(image: #imageLiteral(resourceName: "defaultPhoto")) 
     img.image = img.image?.resizeImageWith(newSize: CGSize(width: 25, height: 25)) 

     btnMyProfile.setImage(img.image, for: .normal) 
     btnMyProfile.imageView?.contentMode = .scaleAspectFit 
     //btnMyProfile.imageView?.setRadius() 
     btnMyProfile.imageView?.layer.cornerRadius = (btnMyProfile.imageView?.frame.width)!/2 
     btnMyProfile.imageView?.layer.borderColor = customeMainBlueColor.cgColor 
     btnMyProfile.imageView?.layer.borderWidth = 2.0 
     btnMyProfile.imageView?.layer.masksToBounds = true 

//someFile.swift 
extension UIImage{ 
//https://stackoverflow.com/questions/42545955/scale-image-to-smaller-size-in-swift3 
    func resizeImageWith(newSize: CGSize) -> UIImage { 

     let horizontalRatio = newSize.width/size.width 
     let verticalRatio = newSize.height/size.height 

     let ratio = max(horizontalRatio, verticalRatio) 
     let newSize = CGSize(width: size.width * ratio, height: size.height * ratio) 
     UIGraphicsBeginImageContextWithOptions(newSize, true, 0) 
     draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize)) 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return newImage! 
    } 
} 
0

Vous devez ajouter une image à l'arrière-plan bouton et assurez-vous que la taille le bouton est proportionnel à 20 * 20, 30 * 30, etc. et définit le même rayon que vous avez déjà défini.