Ответ 1
Я думаю, что это наоборот: включение отсечения ухудшает производительность, потому что ему нужно настроить обтравочную маску. Я смутно помню, как я читал это где-то, но теперь я не могу его найти.
В документации говорится, что свойство clipsToBounds
для UIView
будет привязывать чертеж к границам, а точнее, что subView
не может рисовать за пределами границ superView
.
Звучит неплохо, но что это значит на практике?
Если я установил значение YES, тогда мой subView
будет автоматически рисовать только те части, которые не находятся за пределами superView
. поэтому он увеличивает общую производительность или мне все еще нужно убедиться, что я не создаю никаких видов, которые не видны, т.е. внутри UIScrollView
?
Я думаю, что это наоборот: включение отсечения ухудшает производительность, потому что ему нужно настроить обтравочную маску. Я смутно помню, как я читал это где-то, но теперь я не могу его найти.
Вариант использования для clipToBounds больше подходит для subviews, которые частично находятся за пределами основного вида. Например, у меня есть (круговой) subview на краю его родительского (прямоугольного) UIView. Если вы установите для clipToBounds значение YES, будет показано только половина круга/поднабора. Если установлено значение НЕТ, появится весь круг. Просто столкнулся с этим, поэтому хотел поделиться.
(возможно) поражение производительности является только детерминированным, если вы знаете иерархию представления. Как упоминалось выше, обычно рендеринг будет использовать циклы GPU, чтобы нарисовать представление, ЕСЛИ какой-либо вид в иерархии использует drawRect:
. Это не влияет на приложение OpenGL ES, поскольку drawRect:
в этом типе приложений не указывается.
По моему мнению, определение и отображение обрезанной области может занимать меньше циклов, чем фактически вычислять/рисовать/смешивать весь вид. Начиная с обрезание OpenGL ES 2.0 можно вычислить на графическом процессоре.