Поиск вложенных представлений внутри прямоугольника

#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) }
}