2016-04-18 11 views
0

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 
} 
} 
+1

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

+1

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

+0

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. –

Antwort

3

Sie nur touchesBegan undverwenden, nicht touchesEnded, also wenn die Berührung sich nicht bewegt und dann endet, ignorierst du sie im Grunde. Sie müssen touchesEnded implementieren, um die Zeichnungsänderungen zu übernehmen und sie zu zeichnen.

Verwandte Themen