Подтвердить что ты не робот

Рисовать вне границ UIView от drawRect

Мой вопрос очень похож на этот Не рисовать внешние границы, когда clipToBounds = NO, который не получил четкого ответа.

В основном у меня есть UIView, и я хочу нарисовать линию от ее центра до края экрана. Вычисление, где эти точки являются легкими, с помощью [self convertPoint:(CGPoint){0,0} fromView:[self superview]]; (который находит начало координат по отношению к моему представлению viewview. Но когда я рисую строку из моего вида drawRect: она обрезается на моих границах представления.

Есть ли способ рисовать за пределами моих границ? Я пробовал изменить свойство clipsToBounds, но он, похоже, не имеет никакого эффекта.

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

Точно так же я не думаю, что могу просто изменить размер моих границ, чтобы включить весь экран, потому что мои взгляды должны быть динамически переоценены... границы должны быть ОГРОМНЫМИ ( > 20 000 точек) для это работать.

4b9b3361

Ответ 1

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

Вероятно, что происходит в настоящее время, так это то, что когда супер-просмотр перерисовывается, он сообщает супер-представлению, что ему нужно перерисовать, что приведет к стиранию рисунка, который вы делаете снаружи. Это было какое-то время, любой более осведомленный может (должен!) Исправить меня здесь, если я ошибаюсь.

Я не знаю, работает ли в симуляторе "Quartz Debug" (из стандартных инструментов разработчика Apple, /Developer/Applications/Performance Tools/Quartz Debug), но стоит попробовать. В нем есть режим, который покажет вам, когда и как часто происходит перерисовка, с краской и дополнительной задержкой при обновлении.

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

Кроме того, если ваши диапазоны настолько динамичны, вы можете рассмотреть возможность рисования в процентах экрана или супер-просмотра, а не в точках, это может иметь смысл для кода.