之前做過很多專案都沒考慮過字型適配問題。相信絕大多數人在做專案時,都沒仔細去考慮這件事。一般都是根據ui出的圖做個估算,有耐心的估計會自己拿工具測量下。如今,考慮到iphone機型的多樣性,ui設計師不可能針對每一款iphone的螢幕出一套ui圖。一般而言,都是基於5s的標準出ui。當我們在設定字型時,往往都是基於ui並且針對不同的螢幕字型也都是絕對的。那麼問題來了,細心的同學可能會注意到,相同大小的字型在5s或6上也許差別不大,但在6p上字型有縮小的現象,其原因由解析度導致。
在6出來不久,曾看過有關適配的文章,其中關於iphone尺寸規格如下:裝置寬
高對角線
邏輯解析度
scale factor
裝置解析度
ppi3gs
2.4inch
4.5inch
3.5inch
320x480
@1x320x480
1634(s)
2.31inch
4.5inch
3.5inch
320x480
@2x640x960
3265c
2.33inch
4.90inch
4inch
320x568
@2x640x1136
3265(s)
2.31inch
4.87inch
4inch
320x568
@2x640x1136
3266
2.64inch
5.44inch
4.7inch
375x667
@2x750x1334
3266p
3.06inch
6.22inch
5.5inch
414x736
@3x1242x2208
401
從iphone3gs/iphone4(s)過渡到iphone5(s)時,在邏輯上寬度不變高度稍高,之前舊的素材和布局通過autoresizingflexible簡單適配即可執行得很好,但由於高寬比增大,上下兩端出現黑粗邊(典型如launchimage)。從解析度的角度來看,除了需要提供launchimage這種滿屏圖,其他基本沿用二倍圖(@2x);從螢幕尺寸角度來看,需要對縱向排版略加調整。
從iphone5(s)發展到iphone6(+),由於高寬比保持不變,ios對圖示、、字型進行等比放大自適應,清晰度會有所降低。同時,絕對座標布局會導致在大屏下出現偏左偏上的問題。從解析度的角度來看,iphone6沿用二倍圖(@2x),但需為iphone6+提供更高的三倍圖(@3x);從螢幕尺寸角度來看,需要重新對ui元素尺寸和布局進行適配,以期視覺協調。
以上屬於科普類的東西,下面來點實際的。
關於字型適配有2種方案。
#define adaptive__font_size_minimum_value 20
#define adaptive_font_size_maximum_value 30
-(uifont *) adjustfontsizetofillitscontents
]; cgrect rectsize = [attributedtext boundingrectwithsize:cgsizemake(self
.frame
.size
.width, cgfloat_max) options:nsstringdrawinguseslinefragmentorigin context:nil];
if (rectsize.size
.height
<= self
.frame
.size
.height)
}return
self
.font;
}
cgfloat scale = ([uiscreen mainscreen].bounds
.size
.width / 320);
nslog(@"before : %.1f", [font pointsize]);
font = [uifont fontwithname:[font fontname] size:fontsize * scale];
nslog(@"after : %.1f", [font pointsize]);
既然需要重新設定uifont
,那麼我們不可避免的要hook
下uifont
的類方法`fontwithname:size:
做個函式交換的處理。
函式的交換我們需要用到runtime
機制。
void bd_exchageclassmethod(class aclass, sel oldsel, sel newsel)
然後,我們給uifont
建立乙個categroy
檔案,檔名為adaptivefont
。在實現檔案**如下:
@implementation
uifont (adaptivefont)
+ (void)hook
+ (uifont *)hook_fontwithname:(nsstring *)fontname size:(cgfloat)fontsize
@end
@inte***ce
uifont (adaptivefont)
+ (void)hook;
+ (uifont *)hook_fontwithname:(nsstring *)fontname size:(cgfloat)fontsize;
@end
適配的那些事
1.何為適配 簡單來說就是在不同裝置上檢查功能及樣式是否正常 2.裝置的挑選 b.廠家型號,主要是針對android機子來說的,某些廠商有自己定製的rom。測試方法 可以先測使用者常用的機型,再考慮特殊機型 如小公尺 魅族等等定製rom的機子 最後可以測下現有的 未測過的型號。以下是開發拉取的截止目...
關於開始的那些事
人總是有惰性的,當然我自己深有體會。一直有個想法想寫寫自己的blog,但隨時間的推移,很久都沒付出行動。最近工作專案開始不那麼忙了,維護乙份自己的blog的想法愈發強烈了。想把自己的一些想法,或者看到的一些有用的東西給大家分享,也給自己留下成長的痕跡。我從小喜歡看書,各種各樣的書屬於不求甚解的狀態。...
關於coredump的那些事
今天在網上搜了一些有關coredump的知識,簡單記一下,以防忘記 core dump檔名的模式儲存在 proc sys kernel core pattern中,預設是core 主要是今天比較鬱悶,要除錯程式crash,就用ulimit c unlimited設定了一下core檔案的大小,但是測試...