【问题标题】:Find subviews within rectangle在矩形内查找子视图
【发布时间】:2011-10-06 07:00:19
【问题描述】:

我有一个大的UIView 和许多小的subviews。我需要找到一个区域内的所有subviews。我目前正在遍历subviews 并使用CGRectContainsPoint。这可行,但 90% 的子视图通常不在我感兴趣的矩形内。

有没有更有效的方法来查找矩形内的所有subviews

谢谢

【问题讨论】:

  • :你需要统计你的子视图吗?

标签: iphone ios uiview subview


【解决方案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];
}

【讨论】:

  • 你知道有什么方法可以轻松过滤子视图吗?希望有一种简单的方法可以快速消除非常远的视图。
  • 四行代码非常简单。 Apple 提供的任何方法也都有其背后的代码,所以只需将我提供给您的内容封装在一个方法中即可。
  • 好吧,如果一个子视图不被包含,它的子视图也不会被包含。
【解决方案2】:

@james_womackSwift 中的回答:

func subviewsWithin(area: CGRect) -> [UIView] {
    return subviews.filter { area.contains($0.frame) }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多