Почему drawPatternInRect: на UIImage работает только в контексте Views - PullRequest
0 голосов
/ 10 января 2011

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

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

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

1 Ответ

0 голосов
/ 10 января 2011

Существует дополнительная концепция, относящаяся к графическим контекстам в Какао.В 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 ];
...