一鍵修改 xib storyboard 控件顏色空間(colorSpace)

緣起:

設計那邊出了個缺省頁的圖而後還標註了按鈕的色值,而後我這邊也照常寫了,但屢次溝通後設計仍是說那顏色看起來不對(我看都長得同樣啊,設計自帶像素眼?)ios

排查:

因而乎我打開 XIB 文件看看,確實是設置的 0099E8 呀,由於我沒有像素眼,只能藉助外部工具來看看實際運行起來色值是多少,而後我藉助 FLEX 這個工具看了下色值,神奇的是實際出來的色值變成了 00AAEC(圖一) git

圖一

解決:

通過一頓操做(我是一頓操做)最終定位到問題是電腦的顏色空間不一致致使的問題(想起以前由於 iMac 投出的副屏不清晰而後給 iMac 裝了特定的顏色文件),而後再次打開 XIB 查看顏色空間確實不是經常使用的 sRGB 而是 Generic RGB(圖二),而後把顏色空間改爲 sRGB 後跑起來色值正常了,設計也露出了滿意且邪魅的笑容。 github

圖二

反思:

但這樣真的解決了嗎?是解決了,但解決的只是這個按鈕的色值問題,項目中還有其它地方有這個問題嗎?好,寫個 Demo 來排查下,因而又通過一頓操做這個 Mac 應用出來了,主要能夠根據色值匹配列出項目中全部的元素,而後一鍵替換或部分替換,還有個隱藏功能就是能夠將項目中某個色值替換成指定色值(換膚)。最終發現項目中有 245 個用 GenericRGB 顏色空間致使有色差的地方(圖三),而後進行一一替換。 xcode

圖三

總結:

  • 色值出現誤差是由於 sketch 默認的顏色配置文件是 sRGB IEC61966-2.1(圖四),而 Xcode8 以前是 generic RGB,Xcode8 以後才統一爲 sRGB IEC61966-2.1
  • 代碼編寫的 UIColor 顏色空間默認是 sRGB 的
  • 爲了不出現顏色誤差的問題,最優方案應該是跟設計那邊溝通統一顏色配置文件,畢竟顏色配置文件也是不斷髮展的,誰知道若干年後 sRGB 是否是也過期了呢!
    圖四

ChangeInterfaceBuilderColor

原理:

  1. 分別記錄修改前(matchColor)和修改後(modifyColor)的顏色模型, 以此匹配要改動的 modifyType(只改色值、只改顏色空間或兩者都改);
  2. 遍歷導入路徑下全部的 .xib 和 .storyboard 文件;
  3. 對每個 .xib 和 .storyboard 文件進行 DOM 解析操做,找到全部 color 元素標籤NSXMLElement 並展現存儲;
  4. 點擊替換時修改 color 元素標籤內的 NSXMLNode 相對應的 name,源碼有詳細註釋
  5. 解析方式參考至來源

使用:

替換色值.gif
替換顏色空間.gif
相關文章
相關標籤/搜索