Ich habe eine UIViewController
. Wie zeichne ich eine Linie in einer der programmgesteuert erstellten Ansichten?
ios
objective-c
uiview
uikit
mkc842
quelle
quelle
Antworten:
Es gibt zwei gängige Techniken.
Verwenden von
CAShapeLayer
:Erstellen Sie eine
UIBezierPath
(ersetzen Sie die Koordinaten durch was auch immer Sie wollen):Erstellen Sie eine
CAShapeLayer
, die das verwendetUIBezierPath
:Fügen
CAShapeLayer
Sie das der Ebene Ihrer Ansicht hinzu:In früheren Versionen von Xcode mussten Sie QuartzCore.framework manuell zum "Link Binary with Libraries" Ihres Projekts hinzufügen und den
<QuartzCore/QuartzCore.h>
Header in Ihre .m-Datei importieren. Dies ist jedoch nicht mehr erforderlich (wenn Sie über "Enable Modules" und "Link" verfügen Frameworks automatisch "Build-Einstellungen aktiviert).Der andere Ansatz besteht darin
UIView
, CoreGraphics- Aufrufe in derdrawRect
Methode zu unterklassifizieren und dann zu verwenden :Erstellen Sie eine
UIView
Unterklasse und definieren Sie einedrawRect
, die Ihre Linie zeichnet.Sie können dies mit Core Graphics tun:
Oder mit
UIKit
:Anschließend können Sie diese Ansichtsklasse entweder als Basisklasse für Ihre NIB / Ihr Storyboard oder Ihre Ansicht verwenden oder Ihren Ansichts-Controller programmgesteuert als Unteransicht hinzufügen lassen:
Die Swift-Wiedergaben der beiden obigen Ansätze lauten wie folgt:
CAShapeLayer
::UIView
Unterklasse:Und fügen Sie es Ihrer Ansichtshierarchie hinzu:
Oben
PathView
füge ich programmgesteuert hinzu , aber Sie können es auch über IB hinzufügen und es einfachpath
programmgesteuert einstellen .quelle
shapeLayer.lineCap = kCALineCapRound;
UIBezierPath
mit wiederholtenaddLineToPoint
/addLine(to:)
Anrufen verwenden. Dann können Sie auswählen, ob SieshapeLayer.lineJoin = kCALineJoinRound
oderkCALineJoinBevel
oder bevorzugenkCALineJoinMiter
.Erstellen Sie eine UIView und fügen Sie sie als Unteransicht der Ansicht Ihres View Controllers hinzu. Sie können die Höhe oder Breite dieser Unteransicht so ändern, dass sie sehr klein ist, sodass sie wie eine Linie aussieht. Wenn Sie eine diagonale Linie zeichnen müssen, können Sie die Transformationseigenschaft für Unteransichten ändern.
zB schwarze horizontale Linie zeichnen. Dies wird in der Implementierung Ihres View Controllers aufgerufen
quelle
Swift 3:
quelle
Hier ist eine coole Technik, die Sie vielleicht nützlich finden: Verwenden von Blöcken zum Zeichnen, um Unterklassen in Objective-C zu vermeiden
Fügen Sie die Unterklasse für allgemeine Ansichten des Artikels in Ihr Projekt ein. Dann können Sie diese Art von Code in Ihren Ansichts-Controller einfügen, um im laufenden Betrieb eine Ansicht zu erstellen, die eine Linie zeichnet:
quelle
Mit UIImageView können Sie Linien zeichnen.
Es erlaubt jedoch, die Unterklassifizierung zu überspringen. Und da ich wenig zu Core Graphics neige, kann ich es immer noch verwenden. Sie können es einfach eingeben -
ViewDidLoad
Ergänzung zu Robs Antwort: Für einen schnellen Schritt besteht der dritte Ansatz darin,
UIImageView
die Ansicht von xib zu vertuschen. (Dies ist das Standard-UIImageView-Erscheinungsbild beim Ziehen auf xib in xcode 5)Prost und +1!
quelle
Sie sollten es nicht wirklich tun, aber wenn es aus irgendeinem Grund für Sie sinnvoll ist, können Sie eine Unterklasse von UIView erstellen, die
DelegateDrawView
beispielsweise aufgerufen wird und einen Delegaten benötigt, der eine Methode wie implementiertund dann in den Methoden -
[DelegateDrawView drawRect:]
Sie sollten Ihre Delegate-Methode aufrufen.Aber warum sollten Sie Ansichtscode in Ihren Controller einfügen?
Es ist besser, eine Unterklasse von UIView zu erstellen, die eine Linie zwischen zwei ihrer Ecken zeichnet. Sie können eine Eigenschaft festlegen, um welche zwei festzulegen, und dann die Ansicht an der gewünschten Position von Ihrem Ansichts-Controller aus positionieren.
quelle
In Ihre Ansicht zu zeichnen ist sehr einfach. @ Mr.ROB sagte 2 Methode, ich habe die erste Methode gewählt.
Kopieren Sie einfach den Code, wo Sie ihn haben möchten.
Es wird wie eine Linie gezeichnet, wo sich der Finger bewegt
quelle