Wie kann ich um die gestrichelte Linie Grenze hinzuzufügen UIView
.
Etwas wie das
ios
objective-c
iphone
uiview
Sohaib
quelle
quelle
Antworten:
Sie können den Rahmen mit diesem Muster mithilfe des Ebenen- und Bezier-Pfads wie in den folgenden Beispielen festlegen.
Ziel c
Swift 3.1
Sie können auch verschiedene Arten von Designs mithilfe des Musterbilds wie im folgenden Beispiel festlegen.
Hier müssen Sie
<QuartzCore/QuartzCore>
dem Projekt ein Framework hinzufügen und es mit der folgenden Zeile in dieYourViewController.m
Datei importieren .quelle
Eine andere Methode, wenn Sie Unterschichten mögen. Fügen Sie in der Init Ihrer benutzerdefinierten Ansicht Folgendes ein (_border ist ein ivar):
Und in Ihre Layoutsubviews setzen Sie Folgendes:
quelle
_border.path = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:5.f].CGPath;
_border.lineWidth = 3
border = CAShapeLayer() border.strokeColor = yourColor border.fillColor = nil border.lineDashPattern = [4, 2] self.layer.addSublayer(border)
Für diejenigen unter Ihnen, die in Swift arbeiten, macht diese Klassenerweiterung in UIView es einfach. Dies basierte auf der Antwort von sunshineDev.
Um es zu benutzen:
quelle
addDashedBorder()
während ichdidMoveToSuperview()
dachte, dass das Autolayout bis dahin abgeschlossen sein würde und die Rahmengröße korrekt wäre, aber es war nicht so. Die Breite des gestrichelten Rahmens geht über die Breite der Ansicht hinaus. Die gestrichelte Linie sieht übrigens so gut aus! Dasself.frame.size
ist nicht richtig.Swift 3 :
Verwendung in einem Storyboard (als benutzerdefinierte Klasse) oder direkt im Code:
Ergebnis:
quelle
Aufbauend auf den Vorschlägen von Prasad G habe ich eine Methode in einer UIImage Extras-Klasse mit den folgenden Methoden erstellt:
Es ist wichtig darauf hinzuweisen, dass, wenn Sie die Position Ihrer Form als (0,0) definieren, die untere Ecke des Rahmens in der Bildmitte platziert wird. Deshalb habe ich Folgendes festgelegt: (frameSize.width / 2, frameSize Höhe / 2)
Ich verwende dann meine Methode, um den gestrichelten Rand mithilfe des UIImage meiner UIImageView abzurufen und die CAShapeLayer als Unterebene der UIImageView-Ebene hinzuzufügen:
quelle
Verwenden Sie die CGContextSetLineDash () -Methode.
Ich denke, es wird Ihnen hilfreich sein.
quelle
Hier ist eine UIView-Unterklasse, die für jedes Projekt geeignet ist. Sie funktioniert auch für runde Ansichten:
Auf diese Weise können Sie vom Storyboard aus wie folgt bearbeiten:
Ein paar Ergebnisse:
quelle
Dazu müssen Sie CAShapeLayer für dieses bestimmte Objekt hinzufügen
quelle
Swift 4.2
Basierend auf der Antwort von rmooney als
UIView
Erweiterung mit konfigurierbaren Parametern, für die Standardwerte festgelegt wurden.quelle
shapeLayer.lineJoin = CAShapeLayerLineJoin.round
sollte seinyourViewBorder.lineJoin = kCALineJoinRound
Schnelle Version der QuartzCore-Antwort.
Der
CAShapeLayer
Ansatz funktioniert, aber der QuartzCore-Ansatz kann ein erneutes Laden der Tabellenansicht besser verarbeiten, wenn sich der AnsatzUIView
in einer Zelle befindet.Für das Bild können Sie so etwas verwenden (es ist wirklich klein):
Ich bevorzuge Vektoren gegenüber PNGs, wenn ich damit durchkommen kann:
Images.xcassets
Erstellen Sie innerhalb einNew Image Set
aufgerufenes dottedPatternScale Factors
inSingle Vector
quelle
Für Xamarin.iOS gestrichelter / gepunkteter Rand.
quelle
In Swift 3
quelle
Dies ist, wenn Sie es in Swift 2 wollten
quelle
Versuchen Sie es mit dem folgenden Code
für einen wie unten
quelle
Für Swift 5
Wie man hinzufügen
So entfernen Sie den Rand wieder
quelle
Am Ende habe ich ein IB Designable mit einigen @ Chris-Implementierungen erstellt:
CurvedDashedBorderUIVIew.h:
CurvedDashedBorderUIVIew.m:
dann richte es einfach im xib / storyboard ein:
quelle
Schnelle Lösung mit benutzerdefinierter Klasse arbeitete mit Autolayout
angepasst von @Iain Smith
quelle
Sie können einfach eine IBDesignable-Klasse wie folgt erstellen:
Dann klassifizieren Sie Ihre Ansicht einfach mit BorderedView von Xcode. Auf diese Weise können Sie die Rahmenfarbe und die Rahmenbreite ganz einfach über den Interface Builder einstellen!
quelle
} und rufen Sie diese Funktion in viewdidLoad () mit Verzögerung auf:
quelle
• Swift 5
• Funktioniert mit Autolayout
• Arbeitet mit dem Eckenradius
quelle
In Swift 4 habe ich eine UIView-Erweiterung mit folgender Funktion erstellt:
quelle
Wenn Sie möchten, dass dies mit CornerRadius funktioniert, versuchen Sie dies
quelle
Swift 5+
Wie benutzt man:
quelle