нарисовать рисунок поверх подвидов?
Я создал контейнерное представление, которое содержит кучу дочерних представлений-представление коллекции, пользовательскую панель инструментов и некоторые фрагменты.
Дизайн имеет границу сверху, слева и справа, но не снизу, поэтому я перешел drawRect, чтобы включить границу.
Когда я добавлял панель инструментов, я заметил, что она появляется над верхней границей. (По какой-то причине я сначала думал, что это не так, но, конечно, это так!).
есть ли в любом случае я могу сказать drawRect рисовать поверх моих подсмотров?
Конечно, есть масса других способов решить мою проблему (например, настроить рамку панели инструментов), однако я задаю этот вопрос, чтобы получить глубокое понимание того, как рисунок работает в отношении компоновки и иерархии видов.
3 ответа:
Рисование происходит под всеми подвидами UIView. Думайте о нем, как о самом основании - фактической части вашего представления - а затем каждое подвидо добавляется поверх вашего представления. Делать чертеж над подвидами - это то же самое, что хотеть, чтобы подвиды появлялись под видом, оставаясь при этом подвидами. Возможно, эта аналогия проясняет, почему он всегда должен быть на дне. И это также логически приводит вас к решению:
, Чтобы получить рисунок, который будет отображаться над подпанелей, просто создайте новый подкласс UIView, чтобы поместить в него код чертежа, и поместите его над всеми другими подклассами.
Также может быть хорошей идеей переопределить реализацию
addSubview:
вашего UIView, чтобы гарантировать, что ваше подвидо всегда остается на вершине.
Я считаю, что вы не можете, так как drawRect вызывается сначала для вида, и когда он закончит рисовать drawRect вызывается для подвидов, чтобы рисовать поверх него. Может быть, просто сделать еще один подвид поверх этого представления, который имеет необходимые границы и прозрачен везде?
Подвидырисуются поверх их супервидов . Так что ответ на ваш вопрос-нет.
В то время, когда вы рисуете границу на виде контейнера, Cocoa еще даже не начала рисовать панель инструментов.
Я думаю, что вы могли бы сделать верхнюю часть границы подвидом или переместить панель инструментов немного вниз.