web-dev-qa-db-de.com

Wie erstelle ich ein UIImage / -View mit abgerundeten Ecken CGRect (Swift)

Wie erstelle ich eine UIImageView mit abgerundeten Ecken auf einem Swift iOS Playground?
Im Inneren muss es mit einer Farbe gefüllt sein.

56
Thomas
let imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.backgroundColor = UIColor.redColor()
imageView.layer.cornerRadius = 8.0
imageView.clipsToBounds = true

Ergebnis:

enter image description here

160
Mundi

Für einen gerundeten Kreis-Bilderrahmen in Swift funktionierte Folgendes für mich:

    self.profileImageView.image =  UIImage(named:"profileUser")
    self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
    self.profileImageView.clipsToBounds = true

Und um einen Schatten hinzuzufügen:

    self.profileImageView.layer.masksToBounds = NO;
    self.profileImageView.layer.cornerRadius = 8;
    self.profileImageView.shadowOffset = CGSizeMake(5.0, 5.0);
    self.profileImageView.shadowRadius = 5;
    self.profileImageView.shadowOpacity = 0.5;

Probieren Sie es aus, es hat bei mir funktioniert.

self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
self.profileImageView.clipsToBounds = true
20
Ronaldoh1

Ich hatte es satt zu schreiben setze Radius und Maske auf gebunden für jede UIView. Also habe ich folgende Erweiterung für UIView gemacht. Sollte für jede UIView-Unterklasse funktionieren, obwohl ich es nicht getestet habe. Die Erweiterung kann für bestimmte Ansichten, die Sie natürlich verwenden, eingeschränkt werden.

extension UIView {      
    func setRadius(radius: CGFloat? = nil) {
        self.layer.cornerRadius = radius ?? self.frame.width / 2;
        self.layer.masksToBounds = true;
    }
}

Es wird standardmäßig die halbe Breite der Ansicht verwendet, wenn Sie keinen bestimmten Wert übergeben.

14
Evdzhan Mustafa

Swift 3.0, 4.0

Wenn Sie das Storyboard verwenden möchten. Ich habe dies angewendet und sichergestellt, dass "Clip to bounds" aktiviert ist.

enter image description here

6
A. Trejo

Wenn Sie die Option haben möchten, jedes UIImageView zu runden, können Sie diesen Code in Ihr Projekt kopieren, ohne zu vergessen, clip to bounds und setze seinen Wert auf true

import UIKit

@IBDesignable
extension UIImageView
{
    private struct AssociatedKey
    {
        static var rounded = "UIImageView.rounded"
    }

    @IBInspectable var rounded: Bool
    {
        get
        {
            if let rounded = objc_getAssociatedObject(self, &AssociatedKey.rounded) as? Bool
            {
                return rounded
            }
            else
            {
                return false
            }
        }
        set
        {
            objc_setAssociatedObject(self, &AssociatedKey.rounded, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            layer.cornerRadius = CGFloat(newValue ? 1.0 : 0.0)*min(bounds.width, bounds.height)/2
        }
    }
}

screenshot

3
Mendy Barouk

Swift 5.0:

Meine persönliche Präferenz ist es, eine zusätzliche Swift Datei für bestimmte Änderungen wie diese zu haben. Ich erstelle dann eine Klasse, zB "RoundCorner", die eine Unterklasse des Elements ist, in dem ich Änderungen vornehmen möchte In diesem Fall ein View-Element und dann überschreibe ich die einzelnen Einstellungen.

class RoundCorner: UIView {
override func draw(_ rect: CGRect) {
    self.layer.cornerRadius = 10 // change this number to get the corners you want
    self.layer.masksToBounds = true
    }
}

Danach müssen Sie nur noch das Element auswählen, an dem diese Änderungen vorgenommen werden sollen, und die benutzerdefinierte Klasse auf die zuvor erstellte Klasse festlegen.

Siehe Screenshot hier

1
Panagiotis D.

Das Festlegen von layer.cornerRadius = 1 im Abschnitt Benutzerdefinierte Laufzeitattribute im Identitätsinspektor funktioniert auch bei wiederholbaren Elementen wie Tabellenzellen.

1
Daniel Miranda