視圖層次結(jié)構(gòu)展示-iOS

前言

2016年左右,設(shè)計同學(xué)對UI要求比較高,經(jīng)常要因為幾個像素調(diào)半天,Xcode的視圖層次工具不是那么好用,也沒有Lookin這樣的工具可用。最重要的是溝通UI的時候通常是單獨(dú)拿著手機(jī)在設(shè)計同學(xué)或測試同學(xué)身邊溝通,需要脫離Mac。為此產(chǎn)生自己在手機(jī)上繪制一下視圖層次結(jié)構(gòu)的想法。

設(shè)計

設(shè)計需求

  1. 脫離Mac,只在iPhone上使用。
  2. 可以查看視圖層次結(jié)構(gòu)。
  3. 簡單預(yù)覽視圖信息,如類名、坐標(biāo)、文本、圖片等基本屬性。
  4. 預(yù)設(shè)一些無需顯示的類型。
  5. 顯示高級信息,如選定2個視圖的距離,可磁吸到像素的測距尺。

思考方案

  1. 作為sdk引入app使用,可充分獲取app內(nèi)視圖信息。
  2. 獲取視圖的屏幕坐標(biāo),將視圖進(jìn)行截圖作為預(yù)覽,用于展示視圖層次結(jié)構(gòu)。
  3. 類名、坐標(biāo)、文本可以直接獲取,圖片可通過替換“imageNamed:”、“initWithContentsOfFile:”等方法獲取圖片名。如果使用SDWebImage加載網(wǎng)絡(luò)圖片,還可以使用sd_imageURL作為圖片url。
  4. 無需顯示的類型分兩種,一種是本身無需關(guān)注,但子視圖需要關(guān)注,如“UINavigationTransitionView”,另一種是本身和子視圖都無需關(guān)注,如“_UITextContainerView”
  5. 不想一個工具太過復(fù)雜,更多高級信息還是作為另一個工具處理。
  6. 視圖+信息可能會太擁擠,因此需要放大、縮小、拖動操作,再加個圈中后按列表顯示的方式。

設(shè)計用法

  1. 啟動功能則創(chuàng)建Debug窗口,默認(rèn)讀取所有非Debug的Window信息。
  2. 默認(rèn)全屏預(yù)覽,通過斜切、拖動、縮放查看相關(guān)視圖。
  3. 切換選擇狀態(tài),分屏展示,上半部展示整體預(yù)覽圖,可以進(jìn)行選擇。下半部以列表的方式展示選中視圖的信息。
  4. 為了避免屏幕信息密集,因此可切換信息顯示的多寡。
  5. 有時需要隱藏的業(yè)務(wù)視圖信息,因此可切換是否展示隱藏視圖。
  6. 屏幕視圖太多,可調(diào)整顯示層級范圍,減少顯示的視圖數(shù)量。

設(shè)計接口

  1. 每個項目都可能自定義各種類型的View,有的需要關(guān)注,有的無需關(guān)注,因此首先應(yīng)該提供的配置項是無需顯示的2種視圖類型。
  2. 接口直接設(shè)計成一個View,用戶想在哪展示就放哪展示。
  3. 設(shè)置目標(biāo)視圖,要展示哪些視圖的層次結(jié)構(gòu)。再加一個直接展示所有Window的。
  4. 切換分屏狀態(tài),分屏后下半部以列表展示信息。
  5. 切換選擇狀態(tài),非選擇狀態(tài)下可拖動、縮放,斜切。
  6. 對于無需顯示的視圖,為防萬一,也要加個開關(guān),可以開啟顯示。
  7. 準(zhǔn)備一個預(yù)處理好的Debug窗口,一個語句即可展示app全部視圖層次結(jié)構(gòu)。
  8. Debug窗口的菜單有相關(guān)操作,但也應(yīng)該提供給用戶自定義,因此將菜單數(shù)組作為配置項,按慣例作為組件接口配置。

實現(xiàn)

設(shè)計上都是可行的,實現(xiàn)時只要一點(diǎn)點(diǎn)堆砌代碼就可以了。

https://gitee.com/pkgogai/gydfoundation_public
/GYDDebugFoundation/Code/GYDViewHierarchy/*

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容