CATiledLayer的levelsOfDetail和levelsOfDetailBias的含義(轉)

levelsOfDetail是指,從UIScrollView的1倍zoomScale開始,能夠支持細節刷新的縮小級數。每一級是上一級的1/2,所 以假設levelsOfDetail = n,levelsOfDetailBias不指定的話,CATiledLayer將會在UIScrollView的zoomScale爲以下數字時重新 drawLayer
2^-1 -> 2^-2 -> … -> 2^-n
也就是
1/2, 1/4, 1/8, 1/16, … , 1/2^n

在levelsOfDetailBias不指定的情況下,zoomScale大於0.5後就不會再drawLayer,所以若繼續放大UIScrollView的話,畫面將越來越模糊。

這個時候levelsOfDetailBias就有用了。
levelsOfDetailBias = m表示,將原來的1/2,移到2^m倍的位置。
假設levelsOfDetail = n,levelsOfDetailBias = m的話,會有如下隊列:
2^m * 2^-1 -> 2^m * 2^-2 -> … -> 2^m * 2^-n
簡化一下即
2^(m – 1) -> 2^(m – 2) -> 2^(m – 3) ->… -> 2^(m – n)

舉例,levelsOfDetail = 3,levelsOfDetailBias = 3,則你的UIScrollView將會在以下zoomScale時drawLayer
2^(3 – 1) -> 2^(3 – 2) -> 2^(3 – 3)
即4 -> 2 -> 1

特例是,levelsOfDetailBias > levelsOfDetail時,則每相差2倍就會drawLayer一下。

可以簡單理解成:
levelsOfDetail表示一共有多少個drawLayer的位置
levelsOfDetailBias表示比1大的位置裏有多少個drawLayer的位置(包括1)

以上若還沒看懂的話,以下是圖(點開看原始大小)
圖中灰色的格子表示跨界的格子,它們本來是同一個格子,被1這條線分割了。



注:上面圖中,levelsOfDetail =1 levelsOfDetailBias=2的表示個人感覺有問題.

CATiledLayer還有一個重要屬性tileSize.這個屬性是設定,多少像素爲一個tile,一個線程去畫這一個tile.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章