1. 程式人生 > >程式碼遍歷當前window獲取檢視層級結構

程式碼遍歷當前window獲取檢視層級結構

一,選擇捕獲檢視層級的時機;



我選擇在觸控到螢幕的時候捕獲;


二,開始遍歷;



- (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)];
    }
}