2012-02-15 4 views
0

Я написал следующий код в моем методе loadView.Кварц, прямоугольник не отображается

//draw grid lines 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGFloat color[4] = {.5,0.5,1.0,1.0}; 
CGContextSetLineWidth(context, 2.0); 
CGContextSetStrokeColor(context, color); 
CGRect rect = CGRectMake(100.0, 200.0, 50.0, 50.0); 
CGContextAddRect(context, rect); 
CGContextDrawPath(context, kCGPathFillStroke); 

В моем приложении я добавил UIButtons и UILabels в UIView. Я хочу нарисовать прямоугольник вокруг UILabels.

У меня есть NSLogged с каждой стороны кода и получить следующие ошибки времени выполнения между двумя журналами.

<Error>: CGContextSetStrokeColor: invalid context 0x0 

<Error>: CGContextAddRect: invalid context 0x0 

<Error>: CGContextDrawPath: invalid context 0x0 

т.д.

Как гарантировать, что я получаю правильный контекст? Я предположил вызов UIGraphicsGetCurrentContext(); было бы достаточно.

ответ

1

Если вы не рисуете, контекста графики нет.

Там будет контекст, если:

  • Вы в методе DrawRect
  • Вы создали локальный контекст за кадром, используя UIGraphicsContextBeginImageContextWithOptions() или аналогичный. В этом случае вы обычно извлекаете свой чертеж в объект UIImage для использования позже.
3

Код кварца (CoreGraphics) должен быть выполнен в методе drawRect:UIView.

+0

Хорошо, я поместил код в методе drawRect: (CGRect) в моем ViewController, который является подклассом UIView. Код в drawRect вызывается этими двумя строками CGRect rect = CGRectMake (100.0, 200.0, 50.0, 50.0); Он удалил ошибки, но все еще не заметил графики. [self.view drawRect: rect]; в методе loadView. –

+1

Вы не вызываете 'drawRect:', iOS сделает это для вас, когда это уместно. Также вы уверены, что ваш ViewController является подклассом UIView, а не UIViewController? – gcamp

Смежные вопросы