CGContextAddLineToPoint:没有当前点

时间:2012-03-21 06:35:11

标签: iphone xcode ios5 xcode4 xcode4.2

我正在开发一个模式锁定应用程序,(比如Android锁定)。

我想在点之间画线来打开锁,但是当我画画时,它会返回一个错误:

<Error>: CGContextAddLineToPoint: no current point

它在iOS 5.0及之前正常工作,但它在5.1中显示错误。

这是我的代码:

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

4 个答案:

答案 0 :(得分:13)

要获得当前点,您必须确保在CGContextMoveToPoint开始行动之前至少调用一次CGContextAddLineToPoint

答案 1 :(得分:2)

此:

UIView *lastDot;

应该是:

UIView *lastDot = nil;

未初始化的自动变量是垃圾。当你的lastDot尚未设置时,你的代码会在第一次循环时尝试做一些特殊的事情。您需要先将其明确设置为nil

答案 2 :(得分:1)

您必须首先使用CGContextBeginPath创建路径,然后才能开始向其添加点和线。

答案 3 :(得分:0)

当你第一次来的时候,forin方法不会进来。所以远远使用方法“CGContextMoveToPoint()”,然后导致警告。