CGContextAddLineToPoint: нет текущей точки - PullRequest
9 голосов
/ 21 марта 2012

Я занимаюсь разработкой приложения для блокировки шаблона (например, блокировка 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 ]

13 голосов
/ 03 января 2013

Чтобы получить текущую точку, Вы должны убедиться, что хотя бы один раз CGContextMoveToPoint был вызван, прежде чем CGContextAddLineToPoint вступит в действие.

2 голосов
/ 21 марта 2012

Это:

UIView *lastDot;

Должно быть:

UIView *lastDot = nil;

Неинициализированные автоматические переменные являются мусором.Ваш код пытается сделать что-то особенное в первый раз в цикле, когда lastDot еще не установлено.Сначала вам нужно явно установить nil.

1 голос
/ 21 марта 2012

Вы должны сначала создать путь с помощью CGContextBeginPath, прежде чем сможете начинать добавлять точки и линии к нему.

0 голосов
/ 04 июня 2015

Когда вы впервые приходите, метод forin не приходит. Так что метод "CGContextMoveToPoint ()" широко используется, а затем выдается предупреждение.

...