遍历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}}