Изменение цвета фона CGContext - PullRequest
6 голосов
/ 24 января 2012

Я действительно новичок в работе с CGContexts, и я просто пытаюсь разобраться с вещами, следуя простому учебнику рисования и рисования касанием (http://blog.effectiveui.com/?p=8105)

Я столкнулся с кирпичной стеной, когда он пришел кхотя меняю цвет фона моего CGContext.

Я инициирую констекст следующим образом:

 - (BOOL) initContext:(CGSize)size {
     int bitmapBytesPerRow;
     bitmapBytesPerRow = (size.width * 4);
     cacheContext = CGBitmapContextCreate (nil, size.width, size.height, 8, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast);
     CGContextSetRGBFillColor(cacheContext, 1, 1, 1, 1);
     return YES;
 }

и меняю цвета и ширину обводки следующим образом:

UIColor *color = [UIColor whiteColor];
CGContextSetStrokeColorWithColor(cacheContext, [color CGColor]);
CGContextSetLineCap(cacheContext, kCGLineCapRound); 
CGContextSetLineWidth(cacheContext, 4);

но когда я пытаюсь изменить цвет фона с черного (либо в инициализации, либо в частях настройки рисования / обводки), используя CGContextSetRGBFillColor(cacheContext, 1, 1, 1, 1);, это не дает никакого эффекта.

Кто-нибудь может указать мне направильное направление или лучшее / правильное место для вызова или правильный вызов для использования? Большое спасибо за ваше время!

1 Ответ

22 голосов
/ 24 января 2012

Вы не можете просто установить цвет и ожидать, что контекст заполнится новым цветом. Вам действительно нужно нарисовать этот цвет в контексте. В методе init после установки цвета заливки попробуйте использовать что-то вроде

CGContextFillRect(cacheContext, (CGRect){CGPointZero, size});

В связанной заметке контекст не имеет черного цвета по умолчанию. Они имеют прозрачный цвет. Теперь, если у вашего контекста нет альфа-канала, то это в конечном итоге будет черным, но если у вашего контекста есть альфа-канал и вы видите черный, это потому, что вы визуализируете вывод поверх чего-то черного (или, наоборот, вы помещаете прозрачное изображение в слой, для которого флаг opaque установлен в значение true, а CoreAnimation заканчивает рисовать его поверх черного).

...