2011-01-10 1 views
0

Я создаю свой собственный контекст, используя вызов CGBitmapContextCreate. Контекст создан успешно. Я могу нарисовать UIImage в этом контексте, используя вызов CGContextDrawImage успешно. Но, когда я пытаюсь использовать вызов drawPatternInRect: из UIImage, он дает ошибку «Context is nil».Почему drawPatternInRect: на UIImage работает только в контексте Просмотры

Я уверен, что контекст не ноль, и он создан правильно, потому что CGContextDrawImage отлично работает в том же контексте. Вызов drawPatternInRect: отлично работает только в том случае, если контекст имеет UIView ИЛИ если я создаю контекст в методе drawRect UIView. Но я не могу использовать контекст UIView, так как мне нужно создать UIImage из этого контекста.

Кто-нибудь знает, в чем проблема или какой-либо другой альтернативный простой метод drawPatternInRect?

ответ

0

Существует еще одна концепция, относящаяся к графическим контекстам в какао. В Core Graphics есть CGContextRef, который должен быть передан каждому вызову рисования CG в качестве явного параметра. Во многих других местах в iOS существует концепция текущего контекста, который является глобальным текущим контекстом (глобальным для каждого потока) как подразумеваемым параметром для многих вызовов рисования. Многие API, включая UIImage, рисуют в текущем контексте. См. Заголовок UIGraphics.h.

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

UIGraphicsPushContext(yourCGContext); 

// Do your drawing here 

UIGraphicsPopContext(); 

На Mac вещи похожи с использованием NSGraphics контекста, можно найти в документации компании Apple для NSGraphicsContext.

NSGraphicsContext* nsGraphicsContext = [ NSGraphicsContext 
     graphicsContextWithGraphicsPort: yourCGContext flipped: NO ]; 
[ NSGraphicsContext saveGraphicsState ]; 
[ NSGraphicsContext setCurrentContext: nsGraphicsContext ]; 

// Do your drawing here 

[ NSGraphicsContext restoreGraphicsState ]; 
Смежные вопросы