wake-up-neo.com

Wie setze ich imageView im Bild wie imageContacts in Swift richtig?

Ich möchte ein Bild in imageView zeigen, wie der Bildkontakt (in einem Kreis). Wenn ich jedoch versuche, dies anzuzeigen, skaliert das imageView seine Größe neu und dies wird nicht richtig in einem Kreis angezeigt.

 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

Ich möchte so zeigen: enter image description here

Aber ich bekomme das: enter image description here

Wie kann das Bild auf UIImageView-Größe skaliert werden, um es als Kreis anzuzeigen?

Vielen Dank!

41
user3745888

Welche frame-Größe verwenden Sie für image? Ich kann einen perfekten Kreis erhalten, wenn ich den Rahmen auf ein Quadrat setze.

let image = UIImageView(frame: CGRectMake(0, 0, 100, 100))
35
chuckus

Diese Lösung habe ich in meiner App verwendet:

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

Schnell 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
37
Manu Gupta

Fast und Simple Lösung.

Wie kann man MaskeUIImage in Circle umwandeln, ohne mit Swift zu beschneiden?.

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
  }
}

Wie rufen Sie an:

let anyAvatarImage:UIImage = UIImage(named: "avatar")!
avatarImageView.maskCircle(anyAvatarImage)
16
fatihyildizhan

Ich würde vorschlagen, Ihre Bilddatei zu einem perfekten Quadrat zu machen. Dies kann in fast jedem Bildbearbeitungsprogramm erfolgen. Danach sollte dies in viewDidLoad funktionieren. Kredit zu diesem Video

image.layer.cornerRadius = image.frame.size.width/2
image.clipsToBounds = true
5
jsanabria

Das ist alles was du brauchst ....

        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)
4
Satnam Sync

Erstellen Sie Ihren benutzerdefinierten Kreis UIImageView und den Kreis unter LayoutSubviews. 

/*
      +-------------+
      |             |
      |             |
      |             |
      |             |
      |             |
      |             |
      +-------------+
  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
    }
}
3
iluvatar_GR
reviewerImage.layer.cornerRadius = reviewerImage.frame.size.width / 2;
reviewerImage.clipsToBounds = true
2
Sai kumar Reddy

Ich habe es behoben, indem ich die Ansicht modifizierte:

  1. Gehen Sie zu Ihrem Main.storyboard
  2. Klicken Sie auf Ihr Bild
  3. Ansicht -> Modus -> Seitenfüllung

Es funktioniert perfekt

1
Nicolas2bert

probiere diesen . 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
}
1
Akhil Clement

diese Erweiterung funktioniert wirklich für mich (einschließlich in Swift 4+)

extension UIImageView {
    func roundedImage() {
        self.layer.cornerRadius = (self.frame.size.width) / 2;
        self.clipsToBounds = true
        self.layer.borderWidth = 3.0
        self.layer.borderColor = UIColor.white.cgColor
    }
}

Dann nennen Sie es einfach als

imageView.roundedImage() 
1
Dhanu K

was ich herausgefunden habe ist, dass die Breite und Höhe der Bildansicht eine gerade Zahl ergeben muss, wenn sie durch 2 geteilt wird, um einen perfekten Kreis zu erhalten, z

let image = UIImageView(frame: CGRectMake(0, 0, 120, 120))

es sollte nicht so etwas wie .__ sein. let image = UIImageView (Frame: CGRectMake (0, 0, 130, 130))

0
Umair Afzal

Ich hatte ein ähnliches Ergebnis (eher ein Oval als ein Kreis). Es stellte sich heraus, dass die Einschränkungen, die ich für die UIImageView auferlegte, sie in ein Oval anstelle eines Kreises zwangen. Nach dem Fixieren funktionierten die obigen Lösungen.

0
cph2117

Wenn Sie eine UIViewController verwenden, tun Sie dies mit Anchors . Der Schlüssel ist, den layer.cornerRadius der imageView in viewWillLayoutSubviews so zu setzen:

override func viewWillLayoutSubviews(){
    imageView.layer.cornerRadius = imageView.frame.size.width / 2
}

Stellen Sie außerdem sicher, dass heightAnchor und widthAnchor dieselbe Größe haben. In meinem Beispiel unten sind beide 100

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
}

Wenn Sie einen CollectionView Cell verwenden, setzen Sie den layer.cornerRadius der imageView in 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
}
0
Lance Samaria

Verwenden Sie diesen Code, um das Bild abzurunden 

     self.layoutIfNeeded()
     self.imageView.layer.cornerRadius = 
     self.imageView.frame.width/2
     self.imageView.layer.masksToBounds = true
0
Nithinbemitk

Das funktioniert perfekt für mich ... Die Reihenfolge der Zeilen ist wichtig

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
}

Wie benutzt man:

    @IBOutlet weak var photoImageView: UIImageView!
    ...
    ...
    circularImage(photoImageView)
0
Sahli Simo

Das funktioniert auch bei mir. Verwenden Sie für ein perfektes Kreisergebnis dieselbe Größe für Breite und Höhe. wie image.frame = CGRect(0,0,200, 200)

Bei nicht perfektem Kreis sollten Breite und Höhe nicht den folgenden Codes entsprechen.

 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
0
handiansom

Probieren Sie es aus, es ist Arbeit für mich,

setze imageView in Breite und Höhe gleich.

Swift

imageview?.layer.cornerRadius = (imageview?.frame.size.width ?? 0.0) / 2     
imageview?.clipsToBounds = true
imageview?.layer.borderWidth = 3.0
imageview?.layer.borderColor = UIColor.white.cgColor

Bildschirmfoto enter image description here

Ziel 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;

Hoffe, das hilft jemandem.

0
Jaywant Khedkar