Wie kann ich schnell ein Kreisbild erstellen?
Mein 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))
}
}
Ich profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
mache nichts ..
Beispiel: http://www.appcoda.com/ios-programming-circular-image-calayer/
ios
swift
uiimageview
Pixel
quelle
quelle
profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
tut nicht "nichts". Es macht definitiv etwas! Aber was es tut, ist ziemlich unglücklich. Es erstellt eine UIImageView und weist sie einer schwachen Referenz zu. Die Bildansicht ist leer. es hat kein Bild. Darüber hinaus ist die Referenz schwach, sodass die Bildansicht sofort in einer Rauchwolke verschwindet. An diesem Code ist schwer zu erkennen, was Sie sich hier vorgestellt haben.Antworten:
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 }
Wenn Sie es auf einer Erweiterung wollen
import UIKit extension UIImageView { func makeRounded() { self.layer.borderWidth = 1 self.layer.masksToBounds = false self.layer.borderColor = UIColor.black.cgColor self.layer.cornerRadius = self.frame.height / 2 self.clipsToBounds = true } }
Das ist alles was du brauchst ....
quelle
image.clipsToBounds = true
war genau das, was ich brauchte :-)image.layer.borderColor = UIColor.blackColor().CGColor
verwandelt sich inimage.layer.borderColor = UIColor.black.cgColor
Sie können einfach eine Erweiterung erstellen:
import UIKit extension UIImageView { func setRounded() { let radius = CGRectGetWidth(self.frame) / 2 self.layer.cornerRadius = radius self.layer.masksToBounds = true } }
und benutze es wie folgt:
quelle
Basierend auf der Antwort von @DanielQ
Swift 4 und 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 } }
Sie können es in jedem verwenden
ViewController
mit:quelle
Wenn Sie in Swift ein UIImageView-Rundschreiben erstellen möchten, können Sie einfach diesen Code verwenden:
imageView.layer.cornerRadius = imageView.frame.height / 2 imageView.clipsToBounds = true
quelle
image.clipsToBounds = true
, wird das Bild nicht skaliert.self.view.layoutIfNeeded()
vorher anrufen .Ich weiß nicht, ob dies jemandem hilft, aber ich hatte eine Weile mit diesem Problem zu kämpfen. Keine der Online-Antworten hat mir geholfen. Für mich war das Problem, dass ich im Storyboard unterschiedliche Höhen und Breiten für das Bild festgelegt hatte. Ich habe jede Lösung auf dem Stapel ausprobiert und es stellte sich heraus, dass es so einfach war. Nachdem ich beide auf 200 eingestellt hatte, war mein Kreisprofil perfekt. Das war damals Code in meiner VC.
profileImage2.layer.cornerRadius = profileImage2.frame.size.width/2 profileImage2.clipsToBounds = true
quelle
Für Swift 4 :
import UIKit extension UIImageView { func makeRounded() { let radius = self.frame.width/2.0 self.layer.cornerRadius = radius self.layer.masksToBounds = true } }
quelle
Alle obigen Antworten konnten das Problem in meinem Fall nicht lösen. Mein
ImageView
wurde in einem kundenspezifischen platziertUITableViewCell
. Deshalb hatte ich dielayoutIfNeeded()
Methode auch von hier aus aufgerufen . Beispiel: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; }
quelle
Dieser Weg ist der kostengünstigste und hält Ihre Bildansicht immer abgerundet:
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 } }
In den anderen Antworten werden Sie aufgefordert, Ansichten basierend auf Rahmenberechnungen, die in einer
UIViewController
s-viewDidLoad()
Methode festgelegt wurden, gerundet zu machen . Dies ist nicht korrekt , da nicht sicher ist, wie der endgültige Frame aussehen wird.quelle
Zuerst müssen Sie die gleiche Breite und Höhe einstellen, um Circular ImageView zu erhalten. Unten stelle ich Breite und Höhe auf 100.100 ein. Wenn Sie die gleiche Breite und Höhe entsprechend Ihrer gewünschten Größe einstellen möchten, stellen Sie dies hier ein.
var imageCircle = UIImageView(frame: CGRectMake(0, 0, 100, 100))
Dann müssen Sie Höhe / 2 für den Eckenradius einstellen
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)
quelle
Für Swift3 / Swift4-Entwickler:
let radius = yourImageView.frame.width / 2 yourImageView.layer.cornerRadius = radius yourImageView.layer.masksToBounds = true
quelle
struct CircleImage: View { var image: Image var body: some View { image .clipShape(Circle()) } }
Dies ist richtig für
SwiftUI
quelle
// 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) } }
// um die Funktion vom View Controller aufzurufen
self.imgCircleSmallImage.maskCircle(imgCircleSmallImage.image!)
quelle
imageView.layer.cornerRadius = imageView.frame.height/2 imageView.clipToBounds = true
quelle
Wenn Ihr Bild gerundet ist, hat es eine Höhe und Breite von genau derselben Größe (dh 120). Sie nehmen einfach die Hälfte dieser Zahl und verwenden sie in Ihrem Code (image.layer.cornerRadius = 60).
quelle