Ich bin mir bewusst, dass die Formeln frame.size.width/2
eine Kreisgrenze erzeugen sollte, aber in XCode erlebe ich derzeit einige Diskrepanzen.iOS: frame.size.width/2 erzeugt keinen Kreis auf jedem Gerät
Ich habe zwei Testgeräte (iPhone6 und 5th Gen iPod touch) Ich habe auch den Simulator laufen. Sowohl meine Geräte korrekt angezeigt, aber der Simulator zieht meinen Kreis als Rechteck mit abgerundeten Ecken:
Der Code Ich verwende dieses Ziel zu erreichen (wenn auch sehr einfach) ist:
imgAvatar.layer.masksToBounds = true
imgAvatar.clipsToBounds = true
imgAvatar.layer.cornerRadius = imgAvatar.frame.size.width/2
imgAvatar.layer.borderWidth = 5
imgAvatar.layer.borderColor = UIColor.whiteColor().CGColor
Gibt es ein Warum passiert das? Es macht mich wahnsinnig!
UPDATE Verwirrung zu löschen, wird die UIImageView
in meinem Drehbuch erklärt als 190x190
es auch ein 1:1
Seitenverhältnis Zwang auf sie angewendet hat, um sicherzustellen, dass es eine proportionale Breite und Höhe hält.
UPDATE 2 jeden Verdacht setzen meine Auto-Layout in Bezug auf Einschränkungen zu Bett, habe ich das Bild unten angebracht, die die Einschränkungen für imgAvatar
gesetzt zeigt. Wie Sie sehen können, stimmt die Breite und Höhe überein und der AR ist so eingestellt, dass er das 1: 1 Verhältnis beibehält. Ich hoffe, dass aufräumt weitere Zweifel
ANTWORT Leonardo eine äußerst praktische und wiederverwendbare Lösung dieses Problem hingewiesen zu beheben, Swift-Erweiterungen verwenden, kann man sicherstellen, dass ein bestimmte UIImage immer Platz ist, also immer einen Kreis zu erzeugen, ich habe Leonardos Lösung unten geschrieben:
extension UIImage {
var circleMask: UIImage {
let square = size.width < size.height ? CGSize(width: size.width, height: size.width) : CGSize(width: size.height, height: size.height)
let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: square))
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.image = self
imageView.layer.cornerRadius = square.width/2
imageView.layer.borderColor = UIColor.whiteColor().CGColor
imageView.layer.borderWidth = 5
imageView.layer.masksToBounds = true
UIGraphicsBeginImageContext(imageView.bounds.size)
imageView.layer.renderInContext(UIGraphicsGetCurrentContext())
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return result
}
}
imgAvatar.image = yourImage.circleMask
Können Sie versuchen, die 'imgFrame', sowie die resultierende' cornerRadius' Eigenschaft zu protokollieren? (Beachten Sie, dass 'NSStringFromCGRect()' hier hilfreich sein könnte.) –
Wo ist dieser Code (in welcher Methode)? – rmaddy
Es ist in einer Methode namens 'initFrames', die in' viewDidLoad' aufgerufen wird – Alex