Отрисовка тени слоя в контексте PDF

У меня есть куча UIViews, к которым я добавляю тени через их слои в их методе drawRect:

self.layer.shadowPath = path;
self.layer.shadowColor = [[UIColor blackColor] CGColor];
self.layer.shadowOpacity = .6;
self.layer.shadowOffset = CGSizeMake(2,3);
self.layer.shadowRadius = 2;

Это работает хорошо, но моя проблема в том, что мне также нужно создать PDF-файл с этими представлениями. Я делаю это, создавая контекст PDF и передавая его методу рисования, чтобы рисование происходило в контексте PDF. Это также работает хорошо, за исключением того, что тени не отображаются в PDF. Я экспериментировал с парой подходов, но не смог найти правильный и простой способ заставить эти тени появляться там, где они должны быть в PDF.

Кто-нибудь знает, как это сделать?


person Jerome Cordiez    schedule 25.01.2012    source источник


Ответы (1)


Вам нужно будет сделать соответствующие вызовы CoreGraphics в drawrect для рисования теней, а не использовать свойства CALayer.

Ознакомьтесь с документацией Apple по теням.

person Simon Lee    schedule 25.01.2012
comment
Спасибо Саймон за быстрый ответ. Я боялся этого :) - Есть ли способ, используя CGContextSetShadow, предотвратить добавление теней к штрихам и подпредставлениям? - person Jerome Cordiez; 25.01.2012
comment
Ну, что вы делаете, так это сохраняете/восстанавливаете контекст. Итак, скажем, вы хотите нарисовать тень на одном прямоугольнике, вы используете CGContextSaveState для сохранения текущего состояния, затем добавляете тень в контекст, рисуете свой прямоугольник, а затем используете CGContextRestoreState, чтобы восстановить контекст до того, как он был до добавления тени свойств, вы можете продолжить наложение рисунка, чтобы получить желаемый результат. - person Simon Lee; 25.01.2012
comment
Вы можете вызвать сохранение/восстановление в любой момент, так что вы можете сделать какой-то рисунок, затем сохранить, добавить тень, восстановить, продолжить и т. д. и т. д., то же самое относится к отсечению. - person Simon Lee; 25.01.2012
comment
круто спасибо! Но для обводки и заливки это означает, что мне нужно разделить 2 операции? т.е. дамп CGContextDrawPath(context, kCGPathFillStroke ); и добавить путь дважды и сделать обводку и заливку отдельно? Попытка сделать это сейчас, кажется, работает, но я хотел бы убедиться, что я делаю это правильно. - person Jerome Cordiez; 25.01.2012