Вопрос

Я могу создать Uiimage с основного анимационного уровня, используя следующий код:

- (UIImage*)contentsImage;
{
   UIGraphicsBeginImageContext([self bounds].size);
   [self renderInContext:UIGraphicsGetCurrentContext()];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return image;
}

Этот код находится в моем классе Calayer. Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть два Cashapelayer, которые являются детскими слоями моего слоя, которые не обращаются к результирующему изображению. Если я добавлю стандартные калипы в качестве детей, они становятся нормальными. Документы Apple говорят:

Отдает приемник и его подварители в указанный контекст.

В нем также говорится, что он был доступен после iPhone OS 2.0. Интересно, есть ли что -то, что мне не хватает, или я должен подать радар.

Любые идеи, что может удержать ребенка в кайсапелайвере от привлечения к изображению?

Спасибо.

Это было полезно?

Решение

Механизм Calayer вызывает renderincontext, чтобы создать свой свойство с битмированным содержанием. Но в Cashapelayer собственность Path на самом деле не оценивается до его содержимого, как видно из этой записки в заголовке:

Форма в целом композитируется между содержимым слоя и его первым возвышением.

По мнению, что renderincontext на самом деле не сделает путь Cashapelayer в ваш контекст. Однако я на самом деле не пробовал это для себя.

Другие советы

Не знаю, имеет ли это отношение к вам, но есть записка в документации Calayer для renderincontext, в которой говорится:

**Important**: The Mac OS X v10.5 implementation of this method does not
support the entire Core Animation composition model. QCCompositionLayer, 
CAOpenGLLayer, and QTMovieLayer layers are not rendered. Additionally,
layers that use 3D transforms are not rendered, nor are layers that specify 
backgroundFilters, filters, compositingFilter, or a mask values. 
Future versions of Mac OS X may add support for rendering these layers
and properties.

В любом случае, я столкнулся с аналогичной проблемой при использовании функции RAWRECT UiView в сочетании с рисунком в контексте изображения. Общий uiview, который содержал подвесы, не нарисовал бы свои подписания, если бы я назвал DrawRect (что сейчас имеет смысл, так как он на самом деле говорит в документации, если вы называете DrawRect, вы несете ответственность за заполнение всей этой области независимо от супер и подвизовых реализаций). Я решил свою проблему, только что назвал DrawRect во всех моих подписаниях, передавая их собственные рамки.

Поэтому я бы предложил, возможно, отключиться от renderincontext и вместо этого использовать Calayer's DrawIncontext? Вам нужно будет переопределить метод, так как он ничего не делает по умолчанию. Ваши подклассы также должны будут перемещать контексты в соответствующие рамки. Также для того, чтобы быть в безопасности, вы можете проверить, что ни один из добавлений, который вы добавляете, не влияет на нормальный рендеринг этих слоев.

Я подал радар на это. Я не вижу причин в документах, что это не должно работать. Я отвечу здесь, если/когда Apple ответит на радар.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top