Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CGContextAddLineToPoint: no current point

I am developing a pattern lock application, (like the Android lock).

I want to draw lines between the points to open the lock, but when I am drawing, it returns an error:

<Error>: CGContextAddLineToPoint: no current point

It's working fine in iOS 5.0 and before but it's showing an error in 5.1.

This is my 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
 }
like image 738
Pardhu Avatar asked Mar 21 '12 06:03

Pardhu


3 Answers

To have current point, You have to ensure that at least once CGContextMoveToPoint was called before CGContextAddLineToPoint get in action.

like image 54
bucherland Avatar answered Oct 19 '22 23:10

bucherland


This:

UIView *lastDot;

Should be:

UIView *lastDot = nil;

Uninitialized automatic variables are garbage. Your code is trying to do something special the first time through the loop, when lastDot has not yet been set. You need to explicitly set it to nil first.

like image 37
Kurt Revis Avatar answered Oct 19 '22 23:10

Kurt Revis


You must first create a path with CGContextBeginPath before you can start adding points and lines to it.

like image 41
Rhythmic Fistman Avatar answered Oct 19 '22 23:10

Rhythmic Fistman