程式碼遍歷當前window獲取檢視層級結構
阿新 • • 發佈:2018-12-12
一,選擇捕獲檢視層級的時機;
我選擇在觸控到螢幕的時候捕獲;
二,開始遍歷;
- (NSMutableArray *)pageStructure:(UIView *)sView { NSMutableArray *arr = [[NSMutableArray alloc] init]; for (UIView *view in sView.subviews) { if (view.subviews.count) { NSMutableArray *array = [self pageStructure:view]; //這裡的key是想要獲取的view的資訊; NSDictionary *dict = @{view: array}; [arr addObject:dict]; } else { //這裡的元素是想要獲取的view的資訊; [arr addObject:[view copy]]; } } return arr; }
三,得到資料;
以這個介面為例;
頁面結構資料;{ "UIWindow, {{0, 0}, {375, 667}}" : [ { "UILayoutContainerView, {{0, 0}, {375, 667}}" : [ { "UITransitionView, {{0, 0}, {375, 667}}" : [ { "UIViewControllerWrapperView, {{0, 0}, {375, 667}}" : [ { "UILayoutContainerView, {{0, 0}, {375, 667}}" : [ { "UINavigationTransitionView, {{0, 0}, {375, 667}}" : [ { "UIViewControllerWrapperView, {{0, 0}, {375, 667}}" : [ { "UIView, {{0, 0}, {375, 667}}" : [ { "UITableView, {{0, 0}, {80.5, 667}}" : [ { "UITableViewWrapperView, {{0, 0}, {80.5, 603}}" : [ { "GCClassifyListTableViewCell, {{0, 572}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱13", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 528}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱12", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 484}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱11", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 440}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱10", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 396}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱9", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 352}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱8", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 308}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱7", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 264}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱6", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 220}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱5", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 176}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱4", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 132}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱3", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 88}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱2", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 44}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱1", "UIView, {{0, 10}, {4, 30}}" ] }, { "GCClassifyListTableViewCell, {{0, 0}, {80.5, 44}}" : [ "UITableViewCellContentView, {{0, 0}, {80.5, 44}}", "UILabel, {{10, 0}, {68, 50}}, text:商品名稱0", "UIView, {{0, 10}, {4, 30}}" ] } ] }, "UIView, {{0, 1320}, {80.5, 0}}", "UIImageView, {{75, 593}, {2.5, 7}}", "UIImageView, {{70.5, 597.5}, {7, 2.5}}" ] }, { "UICollectionView, {{81.5, 64}, {293.5, 603}}" : [ { "GCClassifyDetailHeaderCollectionViewCell, {{0, 0}, {293.5, 129}}" : [ "UIView, {{0, 0}, {293.5, 129}}", "UIImageView, {{13.5, 20}, {266, 100}}" ] }, { "GCClassifyDetailCollectionViewCell, {{0, 130}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱0" ] }, { "GCClassifyDetailCollectionViewCell, {{97.833333333333343, 130}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱1" ] }, { "GCClassifyDetailCollectionViewCell, {{195.66666666666666, 130}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱2" ] }, { "GCClassifyDetailCollectionViewCell, {{0, 260}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱3" ] }, { "GCClassifyDetailCollectionViewCell, {{97.833333333333343, 260}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱4" ] }, { "GCClassifyDetailCollectionViewCell, {{195.66666666666666, 260}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱5" ] }, { "GCClassifyDetailCollectionViewCell, {{0, 390}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱6" ] }, { "GCClassifyDetailCollectionViewCell, {{97.833333333333343, 390}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱7" ] }, { "GCClassifyDetailCollectionViewCell, {{195.66666666666666, 390}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱8" ] }, { "GCClassifyDetailCollectionViewCell, {{0, 520}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱9" ] }, { "GCClassifyDetailCollectionViewCell, {{97.833333333333343, 520}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱10" ] }, { "GCClassifyDetailCollectionViewCell, {{195.66666666666666, 520}, {97.833333333333329, 130}}" : [ "UIView, {{0, 0}, {97.833333333333329, 130}}", "UIImageView, {{14.916666666666664, 14}, {68, 48}}", "UILabel, {{0, 72}, {97.833333333333329, 30}}, text:商品名稱11" ] }, "UIImageView, {{288, 3}, {2.5, 251.5}}", "UIImageView, {{283.5, 597.5}, {7, 2.5}}" ] } ] } ] } ] }, { "UINavigationBar, {{0, 20}, {375, 44}}" : [ { "_UIBarBackground, {{0, -20}, {375, 64}}" : [ "UIImageView, {{0, 64}, {375, 0.5}}", { "UIVisualEffectView, {{0, 0}, {375, 64}}" : [ "_UIVisualEffectBackdropView, {{0, 0}, {375, 64}}", "_UIVisualEffectFilterView, {{0, 0}, {375, 64}}" ] } ] }, { "UIButton, {{71, 6}, {296, 32}}" : [ "UIButtonLabel, {{0, 7.5}, {113.5, 17}}, text: ? 推薦搜尋內容" ] }, { "UINavigationItemButtonView, {{8, 6}, {57, 30}}" : [ "UILabel, {{19, 5.5}, {38, 21.5}}, text:Back" ] }, "_UINavigationBarBackIndicatorView, {{8, 11.5}, {13, 21}}" ] } ] } ] } ] }, { "UITabBar, {{0, 618}, {375, 49}}" : [ { "_UIBarBackground, {{0, 0}, {375, 49}}" : [ "UIImageView, {{0, -0.5}, {375, 0.5}}", { "UIVisualEffectView, {{0, 0}, {375, 49}}" : [ "_UIVisualEffectBackdropView, {{0, 0}, {375, 49}}", "_UIVisualEffectFilterView, {{0, 0}, {375, 49}}" ] } ] }, { "UITabBarButton, {{2, 1}, {90, 48}}" : [ "UITabBarButtonLabel, {{42.5, 35}, {5, 12}}, text:1" ] }, { "UITabBarButton, {{96, 1}, {90, 48}}" : [ "UITabBarButtonLabel, {{41.5, 35}, {6.5, 12}}, text:2" ] }, { "UITabBarButton, {{190, 1}, {89, 48}}" : [ "UITabBarButtonLabel, {{41, 35}, {6.5, 12}}, text:3" ] }, { "UITabBarButton, {{283, 1}, {90, 48}}" : [ "UITabBarButtonLabel, {{34.5, 35}, {20.5, 12}}, text:商城" ] } ] } ] } ] }
在json檢視中開啟;
附:在獲取頁面結構的方法裡view作為Dictionary的key和Array的元素,這裡重寫了view的copy方法(開發時勿用);
- (id)copyWithZone:(NSZone *)zone { if ([self isKindOfClass:[UILabel class]]) { return [NSString stringWithFormat:@"%@, %@, text:%@", NSStringFromClass([self class]), NSStringFromCGRect(self.frame), ((UILabel *)self).text]; } else { return [NSString stringWithFormat:@"%@, %@", NSStringFromClass([self class]), NSStringFromCGRect(self.frame)]; } }