Wenn ich einen Punkt auf der Leinwand erstellen möchte, wird er nicht angezeigt. Selbst wenn ich eine einzelne Berührung mache, ist es so, als würde das Programm nicht den ersten CGPoint-Wert erhalten. Erst wenn ich meinen Finger haben die Punktwerte bewegen scheinen (zum Beispiel: (190.0, 375.5), (135, 234), ...)Den ersten Punkt einer Zeichen-App zeichnen?
DV.swift
class DV: UIView {
var lines: [Line] = []
var firstPoint: CGPoint!
var lastPoint: CGPoint!
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)!
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
lastPoint = touches.first!.locationInView(self)
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
var newPoint = touches.first!.locationInView(self)
lines.append(Line(start: lastPoint, end: newPoint))
lastPoint = newPoint
self.setNeedsDisplay()
}
override func drawRect(rect: CGRect) {
var context = UIGraphicsGetCurrentContext()
CGContextBeginPath(context)
// print("fine") starts at beginning only
for line in lines {
CGContextMoveToPoint(context,line.start.x , line.start.y)
CGContextAddLineToPoint(context, line.end.x, line.end.y)
}
CGContextSetRGBFillColor(context, 0, 0, 0, 1)
CGContextSetLineCap(context, .Round)
CGContextSetLineWidth(context, 5)
CGContextStrokePath(context)
}
}
Line.swift // Meine Linie initializer
class Line {
var start: CGPoint
var end: CGPoint
init(start _start: CGPoint, end _end: CGPoint) {
start = _start
end = _end
}
}
Bevor Sie sich Ihren Code genauer ansehen: Haben Sie einfach versucht, 'print'-Anweisungen zu den Funktionen hinzuzufügen, an denen Sie interessiert sind? Besonders bei benutzerdefinierten Grafiken sind Debugging und Protokollierung sehr wichtig, um Probleme zu erkennen. – luk2302
Setzen Sie einen Haltepunkt in 'touchesBegan' ... das Programm empfängt Ihre Berührungen in Ordnung, es ist nur, dass Sie keine Zeichnung machen. Sie rufen 'setNeedsDisplay' nicht auf, und Ihr Zeichnungscode nimmt sowieso vollständige Liniensegmente an (keine einzelnen Punkte). – Hamish
Ja, wenn ich meinen Finger herumbewege, druckt er alle Punkte aus, die mit meinem Finger verfolgt wurden. Es wird jedoch nicht der erste Wert oder der Punkt in diesem Fall ausgedruckt. Meine Vermutung ist, dass es nur Werte empfängt, wenn ich nur meinen Finger bewege. Aber ich weiß nicht, ob es eine zusätzliche Variable gibt, die erstellt werden sollte, um diesen Punkt darzustellen; oder wenn es bereits in meiner Liste von Punkten ist, die ich nicht in meine Leinwand gelegt habe. –