2010-12-27 3 views
3

Как отключить отсечение в CALayer? Я переопределяю drawInContext, но хочу иметь возможность рисовать линии, которые выходят за пределы CALayer, и я не хочу делать отдельный проход чертежа на родительском уровне, чтобы это произошло.Отключить отсечение в CALayer

ответ

5

Вы не можете рисовать, используя Quartz вне границ CALayer или UIView. Как предполагает Ной, вам необходимо расширить границы слоя на заданную величину, чтобы нарисовать это.

Вы все еще можете сделать это, не выполняя рисунок в родительском слое, если для свойства вашего родительского слоя masksToBounds установлено значение НЕТ. Таким образом, даже если ваш подуровень простирается за край родителя, он все равно будет правильно нарисован.

+0

Знаете ли вы, какой бы удар был у этого эффекта? (если есть). У меня есть от 100 до 200 слоев, и это добавит еще 100-200 слоев ... – jjxtra

+0

@JJC - Этот подход не добавит ни одного слоя, просто потребует расширения границ существующих. Это медленнее, чем на больших площадях, но, надеюсь, это будет одноразовая операция. Более крупные слои используют больше памяти, но похоже, что вы просто хотите немного расширить возможности. –

+0

Я вижу, и тогда мне просто нужно будет изменить свой код чертежа, чтобы нарисовать его в центре слоя, а затем провести линию соответствующим образом. Я думаю, что это, наверное, лучшее решение, спасибо! – jjxtra

3

Ну CALayer имеет masksToBounds свойство (которое, установите NO, отключающую вырезку по умолчанию границ слоя), но я не думаю, что это влияет на рисунок самого-только слоя вырезку из его подслоев. Если вы по какой-то причине не можете развернуть кадр самого слоя, вам нужно будет установить это свойство на этом слое, добавить дополнительный подуровень с размерами, которые вы хотите нарисовать внутри, и переместить код чертежа на этот подуровень ,

Смежные вопросы