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:
Aber ich bekomme das:
Wie kann das Bild auf UIImageView-Größe skaliert werden, um es als Kreis anzuzeigen?
Vielen Dank!
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))
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
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)
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
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)
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
}
}
reviewerImage.layer.cornerRadius = reviewerImage.frame.size.width / 2;
reviewerImage.clipsToBounds = true
Ich habe es behoben, indem ich die Ansicht modifizierte:
Es funktioniert perfekt
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
}
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()
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))
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.
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
}
Verwenden Sie diesen Code, um das Bild abzurunden
self.layoutIfNeeded()
self.imageView.layer.cornerRadius =
self.imageView.frame.width/2
self.imageView.layer.masksToBounds = true
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)
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
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
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.