нарисовать рисунок поверх подвидов?


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

Дизайн имеет границу сверху, слева и справа, но не снизу, поэтому я перешел drawRect, чтобы включить границу.

Когда я добавлял панель инструментов, я заметил, что она появляется над верхней границей. (По какой-то причине я сначала думал, что это не так, но, конечно, это так!).

есть ли в любом случае я могу сказать drawRect рисовать поверх моих подсмотров?

Конечно, есть масса других способов решить мою проблему (например, настроить рамку панели инструментов), однако я задаю этот вопрос, чтобы получить глубокое понимание того, как рисунок работает в отношении компоновки и иерархии видов.

3 5

3 ответа:

Рисование происходит под всеми подвидами UIView. Думайте о нем, как о самом основании - фактической части вашего представления - а затем каждое подвидо добавляется поверх вашего представления. Делать чертеж над подвидами - это то же самое, что хотеть, чтобы подвиды появлялись под видом, оставаясь при этом подвидами. Возможно, эта аналогия проясняет, почему он всегда должен быть на дне. И это также логически приводит вас к решению:

, Чтобы получить рисунок, который будет отображаться над подпанелей, просто создайте новый подкласс UIView, чтобы поместить в него код чертежа, и поместите его над всеми другими подклассами.

Также может быть хорошей идеей переопределить реализацию addSubview: вашего UIView, чтобы гарантировать, что ваше подвидо всегда остается на вершине.

Я считаю, что вы не можете, так как drawRect вызывается сначала для вида, и когда он закончит рисовать drawRect вызывается для подвидов, чтобы рисовать поверх него. Может быть, просто сделать еще один подвид поверх этого представления, который имеет необходимые границы и прозрачен везде?

Подвидырисуются поверх их супервидов . Так что ответ на ваш вопрос-нет.

В то время, когда вы рисуете границу на виде контейнера, Cocoa еще даже не начала рисовать панель инструментов.

Я думаю, что вы могли бы сделать верхнюю часть границы подвидом или переместить панель инструментов немного вниз.