获取应用程序的所有视图 - 每时每刻?

时间:2016-04-14 17:33:23

标签: ios uiview

我需要找到一种方法来创建一个在应用程序中始终存在的类。该类对项目中的其他类一无所知。它将能够“跟随”屏幕上的所有UIViews - 所以每一刻我都可以检查(循环)视图,并获得指向每个视图的指针。

它必须运行,并始终检查视图的位置(这是一个内存问题?)

为什么指针?因为我需要了解它的一切,所以如果它是某种移动动画,或者它有一些元数据,如标签等等,所以只知道在某个位置有一些视图是不够的。

是否可以iOS

1 个答案:

答案 0 :(得分:1)

整个想法听起来像一个反模式。但是,......

只需遍历视图树,并为每个有趣属性的每个视图添加一个KVO处理程序。

- (void)traverseSubviewsOfParentView:(UIView*)view
  for( UIView* subview in view.subviews )
  {
    [view addObserver:self forKeyPath:@"frame" options: NSKeyValueObservingOptionNew];
    …
    [self traverseSubviewsOfParentView:subview context:NULL];
  }

然后实施观察方法:

-(void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context 
{
  if( [@"frame" isEqualToString:keyPath] )
  {
    // Do what you want to do
  }
  …
}

此外,您必须观察每个视图的subviews属性,以便在插入或删除视图时收到通知。