Нарисуйте линию в iPhone, Исключение - PullRequest
1 голос
/ 21 августа 2010

Я пытаюсь нарисовать линию.

Я написал код, подобный приведенному ниже.

UIColor *currentColor = [UIColor blackColor];

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGContextMoveToPoint(context, startingPoint.x, startingPoint.y);
CGContextAddLineToPoint(context,endingPoint.x , endingPoint.y);
CGContextStrokePath(context);

, но это показывает следующее исключение

Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetLineWidth: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextMoveToPoint: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextAddLineToPoint: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextDrawPath: invalid context 0x0

Ответы [ 2 ]

4 голосов
/ 28 августа 2010

Вам также нужно позвонить CGContextBeginPath(ctx); как раз перед тем, как позвонить CGContextMoveToPoint

- (void) drawRect: (CGRect) rect
{
  UIColor *currentColor = [UIColor blackColor];

  CGContextRef context = UIGraphicsGetCurrentContext(); 
  CGContextSetLineWidth(context, 2.0);
  CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
  CGContextBeginPath(context); // <---- this 
  CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
  CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y);
  CGContextStrokePath(context);
}
2 голосов
/ 21 августа 2010

У вас нет действительного графического контекста.UIGraphicsGetCurrentContext() очевидно возвращено nil.

Куда вы хотите рисовать?

Если вы хотите рисовать на экране, вам следует реализовать метод drawRect: UIView или один из его подклассов, и iOS вызывает этот метод (вызывая обновление части вашего экрана).Тогда у вас будет действительный графический контекст во время выполнения drawRect:.

Если вы хотите нарисовать на пиксельную карту за пределами экрана, то вы должны создать графический контекст самостоятельно с помощью UIGraphicsBeginImageContext или аналогичной функции..

РЕДАКТИРОВАТЬ:

Итак, для рисования в UIView необходимо создать UIView подкласс и переопределить drawRect:

@interfaceMyView : UIView {
}

@end


@implementation MyUIView

- (void) drawRect: (CGRect) rect
{
  UIColor *currentColor = [UIColor blackColor];

  CGContextRef context = UIGraphicsGetCurrentContext(); 
  CGContextSetLineWidth(context, 2.0);
  CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
  CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
  CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y);
  CGContextStrokePath(context);
}

Затем вы открываете файл XIB (который вы, вероятно, уже имеете = в Interface Builder, добавляете туда UIView и выбираете MyUIView в качестве класса (первое поле на последней вкладке в окне инспектора).

...