Как я могу быстро определить все подпредставления (UIViews), которые пересекаются с прямоугольником? - PullRequest
0 голосов
/ 27 марта 2012

У меня есть представление, которое содержит множество подпредставлений.Если пользователь нажимает вниз и перетаскивает прямоугольник выбора вокруг некоторых из подпредставлений, есть ли более быстрый способ определить, какие подпредставления пересекаются с прямоугольником выбора, кроме как перебирать все подпредставления основного родителя?

Мое решениеработает, перебирая каждое подпредставление и используя CGRectIntersectsRect(selectionRect, aSubview.frame), но на мой взгляд, это слишком медленно.

1 Ответ

1 голос
/ 27 марта 2012

Короткий ответ - нет.Длинный ответ в основном потому, что frame является вычисляемым свойством , функцией bounds, center и transform.Даже простое тестирование попаданий основано на итерации.

Реальный вопрос в том, почему вы думаете, что это слишком медленно.Если у вас есть сотни видов, я предлагаю кэшировать кадры, скажем, в touchesBegan:withEvent:, чтобы сэкономить на вычислениях кадров и отправлять сообщения Objective-C каждый раз, когда вам нужно проверить пересечение (когда вы перетаскиваете палец).

Возможно, вы также можете применить некоторые приемы оптимизации, такие как сортировка представлений по происхождению фрейма, но это усложнит ваш код.

...