Achten Sie darauf, dass wenn Sie Layout-Einschränkungen daran angehängt haben, müssen Sie dies wie folgt in Ihrer UIView-Unterklasse aktualisieren:
override func layoutSubviews() {
super.layoutSubviews()
roundCorners(corners: [.topLeft, .topRight], radius: 3.0)
}
Sonst wird es nicht angezeigt.
Und um Ecken abzurunden, verwenden Sie die Erweiterung:
extension UIView {
func roundCorners(corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask
}
}
Zusätzlicher ViewController-Fall: Wenn Sie eine Ansicht nicht unterklasse oder nicht unterklasse möchten, können Sie eine Ansicht dennoch abrunden. Machen Sie es von seinem ViewController aus, indem Sie die Funktion viewWillLayoutSubviews()
überschreiben, wie folgt:
class MyVC: UIViewController {
/// Die Ansicht, an der die oberen linken und oberen rechten Ecken abgerundet werden sollen
let theView: UIView = {
let v = UIView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))
v.backgroundColor = .red
return v
}()
override func loadView() {
super.loadView()
view.addSubview(theView)
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Rufen Sie die roundCorners() Funktion direkt dort auf.
theView.roundCorners(corners: [.topLeft, .topRight], radius: 30)
}
}
9 Stimmen
Nach Ihrer Bearbeitung drei Dinge zu beheben: (1) der abgerundete Pfad sollte auf
view.bounds
basieren, nicht aufframe
, (2) die Ebene sollte einCAShapeLayer
sein, nichtCALayer
; (3) setzen Sie denpath
der Ebene, nichtshadowPath
.1 Stimmen
Möglicher Duplikat dieser Frage & Antwort.
0 Stimmen
Verwenden Sie den Bezier-Kurvenalgorithmus, um Kurven auf einem CGPath zu erstellen. Ich bin mir ziemlich sicher, dass es Teil von CoreGraphics ist. Wenn nicht, hat en.wikipedia.org/wiki/Bézier_curve einige großartige Definitionen und Animationen.
0 Stimmen
iosdevcenters.blogspot.com/2018/02/…
0 Stimmen
Siehe meine Antwort hier: stackoverflow.com/a/50396485/6246128
0 Stimmen
Es ist auf iOS 11 und höher viel einfacher: johncodeos.com/…
0 Stimmen
IOS 11 - Lösung nur für den Interface Builder: stackoverflow.com/a/58626264