Проблема в рисовании прямоугольника - PullRequest
3 голосов
/ 16 апреля 2011

Я использую приведенный ниже код в viewLoad (я не хочу рисовать в - (void)drawRect:(CGRect)rect) для добавления прямоугольника в представление, но не работает. Почему?

CGRect rect=CGRectMake(10,10,150,140);
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetStrokeColor(context, red);
CGContextBeginPath(context);
CGContextMoveToPoint(context, 10, 10);
CGContextAddRect(context, rect);
CGContextStrokePath(context);

Ответы [ 2 ]

6 голосов
/ 16 апреля 2011

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

Может показаться, что вы получаете контекст, но на самом деле это не так, как UIGraphicsGetCurrentContext() возвращает nilза пределами drawRect: (или, если быть более точным: он возвращает только контекст внутри drawRect: или если вы сами создали и вставили контекст изображения).

3 голосов
/ 16 апреля 2011

UIGraphicsGetCurrentContext() вернет ноль, когда нет текущего контекста.Контекст создается для вас до вызова drawRect:;если вы хотите создать контекст вручную, используйте UIGraphicsBeginImageContext или UIGraphicsBeginImageContextWithOptions для его запуска, UIGraphicsGetImageFromCurrentImageContext() для извлечения UIImage и UIGraphicsEndImageContext(), когда вы закончите с ним для освобождения контекста.Подробности смотрите в документации .

Конечно, вы также можете создать CGBitmapContextRef и использовать вызовы CoreGraphics напрямую, а не вызовы UIKit.У каждого подхода есть свои плюсы и минусы, главное отличие - матрица преобразования по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...