回覆列表
  • 1 # g86099019fenyan

    對於6+之前的手機,pt和px的比例為1:2。而6+出來之後,這一比例達到了1:3。同時解析度達到了1242x2208(使用ip6+截圖,再傳到電腦上看,就是這個解析度),而iphone實際解析度為1080x1920。解析度的比率為1.15:1。

    對於ppi,6+之前均為326,而6+之後變為401。

    素材資源發生的變化@3x

    在實際開發中,素材通常是UI美眉負責提供。從@2x到@3x,素材的解析度提高了1.5倍。例如一個@2x的素材大小為44x44,那麼相應的@3x大小解析度為66x66。

    檔案命名的方式依然沒變:${IMG_NAME}@3x.png這種形式了。命名好的檔案丟入資原始檔夾內,只要程式碼保持一致,檔名稱不變即可。

    UI到程式碼

    由於ip6+點(point)和畫素(pixel)的關係為1:3,因此,當UI設計稿基於1242x2208解析度【iphone6+】圖給定UI設計稿時,程式設計師進行實際換算為設計稿的1/3。

    btn2.frame = CGRectMake( GetX(btn1.frame)+GetWidth(btn1.frame)+30.f/3,

    GetY(btn1.frame),

    GetWidth(btn1.frame),

    GetHeight(btn1.frame)

    );

    由於實際間距為30px,因此在程式碼中應該做除3的處理,保證間距效果。當然,如果設計搞給的不是ip6+的圖,那麼這裡的30.f/3還是應該按照以前的老規矩:30.f/2。

    程式碼到UI

    從UI到程式碼,只要在明確UI給出的設計圖是基於哪部手機(具體來說是哪種解析度)即可。但是,對於已經寫好的程式碼,在不同的UI上表現是否相同呢?還是給出類似上面的程式碼:

    btn2.frame = CGRectMake( GetX(btn1.frame)+GetWidth(btn1.frame)+10.f,

    GetY(btn1.frame),

    GetWidth(btn1.frame),

    GetHeight(btn1.frame)

    );

    有兩個btn,btn1和btn2之間的水平間距是10。現在問題來了:這兩個btn之間的距離在不同手機上看起來是相同的麼?我們進行實際的換算:

    因此,相同的程式碼,在iphone6+和非iphone6+(ip4, 5, 6)的手機上表現是不同的:

    在非iphone6+中,間距為20px;在iphone6+中,間距為30px。糟了,那間距在不同手機上相差了10個畫素?外觀就有差距了,如何調整?

    【其實不用太過擔心】,他們的間距【看起來】依舊相同。還是給出一個表格:

    ·解析度縮放

    ip6+的實際解析度為1080x1920,和1242x2208的解析度的比例為1:1.15。那麼30px在實際距離變為了:30/1.15 = 26.0870

    可以看到差不多在26個px左右,間距【看起來】變小了一些。

    ·ppi影響

    ppi,每英寸畫素個數。ip6+的ppi為401,而非ip6+的ppi為326。相同螢幕物理距離,ip6+會顯示更多的畫素;或者,相同px長度,在ip6+上【看起來】更短。它們之間的比例:401/326 = 1.2301

    ·【看起來】

    現在我們計算30個px在ip6+上與以前ip手機相比【看起來】有多長:30/(1.15*1.2301) = 21.2078

    換算完畢之後,pt為10,在ip6和ip6+上面的間距【看起來】變成了:

    20px和21.2px在高分屏上,並且是用肉眼觀察,它們的區別是很不明顯的。那麼結論就是,相同的UI程式碼,在不同的手機上的表現是基本相同的。對於在以前手機上寫死的相對距離,不用過於擔心在ip6+上的排序會亂掉。

    從ip6+的處理上可以看出,蘋果手機在設計時可能考慮到了開發者的方便

  • 中秋節和大豐收的關聯?
  • 商業版咖哩牛肉麵配方?