Получение ошибок при попытке рисовать с UIBezierPath - PullRequest
0 голосов
/ 02 октября 2010

Я пытаюсь нарисовать несколько линий внутри своего пользовательского UIView.

Из того, что я вижу, чтобы избежать возни с CoreGraphics, я могу использовать UIBezierPath (я сделал то же самое с NSBezierPath на Mac). У меня есть некоторый код, который пытается нарисовать линии, но я получаю ошибки вывода и не могу найти достойную ссылку с некоторым примером кода, чтобы проиллюстрировать, что происходит, какие-нибудь идеи? Код ниже ...

Код:

  - (void)drawRect:(CGRect)rect {
    // Drawing code
    UIBezierPath *line1 = [UIBezierPath bezierPath];
 [[UIColor blackColor] setStroke];
 [line1 setLineWidth:3];
 [line1 moveToPoint:CGPointMake(0, 0)];
 [line1 addLineToPoint:CGPointMake(320, 480)];
 [line1 stroke];

}

Ошибка:

Sat Oct  2 19:26:43 mercury.config mobileManual[46994] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0

ОБНОВЛЕНИЕ: Вот текущий код, без ошибок, но и без рисунка .. идеи?

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor yellowColor]];
    [self.view setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context);
    UIBezierPath *line1 = [UIBezierPath bezierPath];
    [line1 setLineWidth:3];
    [line1 moveToPoint:CGPointMake(0, 0)];
    [line1 addLineToPoint:CGPointMake(320, 480)];
    [line1 stroke];
    CGContextRestoreGState(context);
}

Ответы [ 2 ]

2 голосов
/ 03 октября 2010

Как я уже говорил выше, ваш код работает нормально для меня.

Вы меняете «Идентификацию класса» представления в Интерфейсном Разработчике на свой подкласс UIView?Кроме того, вызывать setNeedsDisplay в viewDidLoad не нужно, но это также не причиняет вреда.)

1 голос
/ 02 октября 2010

Ваш графический контекст недействителен. Это происходит потому, что:

  • Вы звонили drawRect: самостоятельно. Никогда не делай этого. Вместо этого вызовите setNeedsDisplay и попросите iOS вызвать его.
  • Вы как-то уничтожили текущий графический контекст (менее вероятно).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...