#iphone #ios #uiview #subview
#iPhone #iOS #uiview #вложенный просмотр
Вопрос:
У меня есть большой UIView
со многими маленькими subviews
. Мне нужно найти все subviews
в пределах области. В настоящее время я перебираю subviews
и использую CGRectContainsPoint
. Это работает, но 90% вложенных представлений обычно не находятся в интересующем меня прямоугольнике.
Есть ли более эффективный способ найти все subviews
внутри прямоугольника?
Спасибо
Комментарии:
1. : вам нужно подсчитать ваши вложенные просмотры?
Ответ №1:
CGRectContainsRect
было бы более уместно. Вам все равно нужно будет перебирать все вложенные представления, которые могут быть в вашем прямоугольнике, исходя из того, что вы можете предположить об их позициях, но CGRectContainsRect
все же имеет больше смысла, чем CGRectContainsPoint
.
CGRect area = CGRectMake(10,10,200,200);
NSMutableArray *viewsWithinArea = [[NSMutableArray alloc] init];
for (UIView *aView in [self.view subviews]) {
if(CGRectContainsRect(area,aView.frame)) [views addObject:aView];
}
Комментарии:
1. Знаете ли вы какой-либо способ легко фильтровать вложенные представления? Надеялся, что есть простой способ быстро устранить представления, которые находятся очень далеко.
2. Четыре строки кода — это довольно просто. Любой метод, который Apple предоставит, также будет содержать код, поэтому просто оберните то, что я вам дал, в метод.
3. ну, если вложенное представление не содержится, его вложенные представления также не будут содержаться.
Ответ №2:
ответ @james_womack в Swift:
func subviewsWithin(area: CGRect) -> [UIView] {
return subviews.filter { area.contains($0.frame) }
}