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
}
To have current point, You have to ensure that at least once CGContextMoveToPoint
was called before CGContextAddLineToPoint
get in action.
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.
You must first create a path with CGContextBeginPath
before you can start adding points and lines to it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With