CGContextAddLineToPoint: kein Aktueller Punkt
Ich bin die Entwicklung einer pattern lock-Anwendung (wie den Android-lock).
Ich soll zum zeichnen von Linien zwischen den Punkten, um das Schloss zu öffnen, aber wenn ich mir die Zeichnung, gibt es einen Fehler:
<Error>: CGContextAddLineToPoint: no current point
Es ist in Ordnung, die in iOS 5.0 und vor, aber es zeigt einen Fehler in 5.1.
Dies ist mein code:
- (void)drawRect:(CGRect)rect
{
NSLog(@"drawrect...%@",NSStringFromCGRect(rect));
if (!self._trackPointValue)
return;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10.0);
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGFloat components[] = {0.5, 1.0, 0.5, 0.8};
CGColorRef color = CGColorCreate(colorspace, components);
CGContextSetStrokeColorWithColor(context, color);
CGPoint from;
UIView *lastDot;
for (UIView *dotView in self._dotViews) { //_dotViews array of points
from = dotView.center;
if (!lastDot)
{
CGContextMoveToPoint(context, from.x, from.y);
}
else
{
NSLog(@"from : %@",NSStringFromCGPoint(from));
CGContextAddLineToPoint(context, from.x, from.y);
}
lastDot = dotView;
}
CGPoint pt = [self._trackPointValue CGPointValue]; //_trackPointValue is current point
CGContextAddLineToPoint(context, pt.x, pt.y);
CGContextStrokePath(context);
CGColorSpaceRelease(colorspace);
CGColorRelease(color);
self._trackPointValue = nil;//_trackPointValue is current point
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben aktuelle Punkt, haben Sie, um sicherzustellen, dass mindestens einmal
CGContextMoveToPoint
genannt wurde, bevorCGContextAddLineToPoint
Aktion.Diese:
Werden sollte:
Nicht initialisierten automatischen Variablen sind Müll. Ihr code versucht zu tun, etwas besonderes, das erste mal durch die Schleife, wenn
lastDot
ist noch nicht festgelegt worden. Sie müssen explizit den Wertnil
ersten.Müssen Sie zunächst erstellen Sie einen Pfad mit
CGContextBeginPath
bevor Sie beginnen können, das hinzufügen von Punkten und Linien zu.CGContextBeginPath
nur, wenn Sie wollen, entsorgen Sie den aktuellen Pfad, und beginnen mit einem neuen leeren Pfad.Beim ersten kommen, die forin Methode nicht weiter kommen.So gibt es viel Einsatz der Methode "CGContextMoveToPoint()" , und dann führen die Warnung.