2012-03-21 9 views
7

Estoy desarrollando una aplicación de bloqueo de patrones (como el bloqueo de Android).CGContextAddLineToPoint: no hay punto actual

quiero dibujar líneas entre los puntos para abrir la cerradura, pero cuando estoy dibujando, devuelve un error:

<Error>: CGContextAddLineToPoint: no current point

Está funcionando muy bien en iOS 5.0 y antes pero está mostrando un error en 5.1.

Este es mi código:

- (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 
} 

Respuesta

0

Primero debe crear un camino con CGContextBeginPath antes de poder empezar a añadir puntos y líneas a la misma.

+4

No es cierto. Un CGContext siempre tiene una ruta actual (posiblemente una vacía) a la que puede agregarle elementos. Necesitas 'CGContextBeginPath' solo cuando quieras descartar la ruta actual y comenzar con una nueva ruta vacía. –

+0

No lo sabía, gracias. –

2

Este:

UIView *lastDot; 

debe ser:

UIView *lastDot = nil; 

sin inicializar variables automáticas son basura. Su código intenta hacer algo especial la primera vez a través del ciclo, cuando todavía no se ha establecido lastDot. Primero debe establecerlo explícitamente en nil.

+0

Hola, gracias tanto que lo obtuve. Gracias por la sugerencia – Pardhu

11

Para tener el punto actual, debe asegurarse de que al menos una vez se llamó CGContextMoveToPoint antes de CGContextAddLineToPoint ponerse en acción.

+0

por casualidad, ¿hay algo fuera de lo común que haría que ese método no se llame? Estoy teniendo el mismo problema, pero estoy absolutamente seguro – d2burke

+0

@ d2burke - Asegúrese de estar llamando a CGContextStrokePath() solo después de que la línea esté completa. Si la llama antes de que la línea se complete, debe llamar a CGContextMoveToPoint () de nuevo. –

0

Cuando ingrese por primera vez, el método forin no entrará. Por lo tanto, hay un uso prolongado del método "CGContextMoveToPoint()", y luego aparece la advertencia.

Cuestiones relacionadas