遍历iPhone上的视图层次结构

这是一个有用的例程,你可以使用iPhone来遍历视图层次结构,当你想知道什么是创build和它的去向。

此例程将视图层次转换为从传入的视图开始的NSLog。子视图在子视图数组中显示其索引,所有超级类按顺序用分号结尾的帧大小分隔。

要转储应用程序的整个视图层次结构,请调用像这样的方法:

dumpViews([[UIApplication sharedApplication] keyWindow], @"", @""); 

要显示相机视图的层次结构,请在控制器中覆盖此方法:

 navigationController:willShowViewController:viewController:animated 

并像这样调用转储程序:

 dumpViews(self.modalViewController.view, @"", @""); 

对于所有其他意见:

 dumpViews(myView, @"", @""); 

资源

 void dumpViews(UIView* view, NSString *text, NSString *indent) { Class cl = [view class]; NSString *classDescription = [cl description]; while ([cl superclass]) { cl = [cl superclass]; classDescription = [classDescription stringByAppendingFormat:@":%@", [cl description]]; } if ([text compare:@""] == NSOrderedSame) NSLog(@"%@ %@", classDescription, NSStringFromCGRect(view.frame)); else NSLog(@"%@ %@ %@", text, classDescription, NSStringFromCGRect(view.frame)); for (NSUInteger i = 0; i < [view.subviews count]; i++) { UIView *subView = [view.subviews objectAtIndex:i]; NSString *newIndent = [[NSString alloc] initWithFormat:@" %@", indent]; NSString *msg = [[NSString alloc] initWithFormat:@"%@%d:", newIndent, i]; dumpViews(subView, msg, newIndent); [msg release]; [newIndent release]; } } 

相机转储示例

 UIView:UIResponder:NSObject {{0,0},{320,480}}
   0:PLCameraView:UIView:UIResponder:NSObject {{0,0},{320,480}}
     0:UIView:UIResponder:NSObject {{0,0},{320,427}}
     1:UIImageView:UIView:UIResponder:NSObject {{10000,10000},{320,480}}
     2:UIView:UIResponder:NSObject {{0,427},{320,53}}
     3:PLCropOverlay:UIView:UIResponder:NSObject {{0,0},{320,480}}
       0:UIImageView:UIView:UIResponder:NSObject {{0,20},{320,96}}
       1:PLCropLCDLayer:UIView:UIResponder:NSObject {{0,20},{320,96}}
       2:TPBottomDualButtonBar:TPBottomButtonBar:TPBottomBar:UIView:UIResponder:NSObject {{0,384},{320,96}}
         0:TPPushButton:UIThreePartButton:UIPushButton:UIControl:UIView:UIResponder:NSObject {{22,26},{128,47}}
         1:TPCameraPushButton:TPPushButton:UIThreePartButton:UIPushButton:UIControl:UIView:UIResponder:NSObject {{170,26},{128,47}}
           0:UIImageView:UIView:UIResponder:NSObject {{51,12},{26,19}}