本文檔是對(duì)培訓(xùn)文檔
Frame和Bounds.pdf
的補(bǔ)充佛猛,基本概念略過谷誓。
本文檔描述Bounds
的origin
變化滑凉,引起的子視圖位置移動(dòng)的過程以及原理。
這里還未探究當(dāng)旋轉(zhuǎn)縮放等用到矩陣轉(zhuǎn)換
時(shí)贫橙,frame
的size
與bounds
的size
不一致的情況贪婉。
預(yù)設(shè)
- 預(yù)設(shè)三種View,
SuperView
卢肃、CurrentView
以及SubView
- 統(tǒng)一概念疲迂,
SuperView
的坐標(biāo)系才顿,稱為世界坐標(biāo)系
,具體就是frame
使用的坐標(biāo)系。 - 統(tǒng)一概念尤蒿,
CurrentView
的坐標(biāo)系郑气,稱為本地坐標(biāo)系
,具體就是bounds
使用的坐標(biāo)系腰池。
參照系
- 世界坐標(biāo)系尾组,影響的
CurrentView
的顯示位置也即本地坐標(biāo)系
的位置,frame
改變的是CurrentView
的世界坐標(biāo)系
的位置(絕對(duì)位置)示弓。 - 本地坐標(biāo)系讳侨,影響的是
SubView
的顯示位置。因?yàn)?code>本地坐標(biāo)系是SubView
的世界坐標(biāo)系
奏属,bounds
修改本地坐標(biāo)系
的坐標(biāo)原點(diǎn)
跨跨,但是本地坐標(biāo)系
的位置并沒有改變(frame
控制)。
依據(jù)
- 已知
SetBounds
之后囱皿,系統(tǒng)會(huì)進(jìn)行光柵化
處理勇婴,把視圖展示在屏幕上≈鲂龋可以根據(jù)最終視圖的顯示推理相應(yīng)原理耕渴。
DEMO為例
黃色View是一個(gè)ScrollView,1,2爹橱,3是三個(gè)UIImageView.
通橙荩看到的效果
設(shè)置
sv.layer.masksToBounds = NO;
分析
品紅色為
SuperView
,黃色SCrollView
為CurrentView
,1,2,3標(biāo)號(hào)的為3個(gè)SubView
.
綠色坐標(biāo)系為CurrentView
的世界坐標(biāo)系
窄做,藍(lán)色坐標(biāo)系為CurrentView
的本地坐標(biāo)系
初始狀態(tài)
上滑之后
對(duì)比兩種狀態(tài)
-
CurrentView
的frame
沒有改變愧驱,CurrentView
的本地坐標(biāo)系
的位置也沒有變,只有本地坐標(biāo)系
的原點(diǎn)
的值變了椭盏。 -
原點(diǎn)
y值由0變?yōu)?28,SubView
①圖的frame的origin是(0,0)沒變,則在y坐標(biāo)原點(diǎn)
的負(fù)方向找到y(tǒng)值為0的地方组砚,移動(dòng)到對(duì)應(yīng)(0,0)的位置。視覺效果就是向上滾動(dòng)掏颊,超過默認(rèn)的可視區(qū)域
糟红。
結(jié)論
- 要改變
CurrentView
的位置,有兩種方法乌叶。
- 改變
CurrentView
的Frame
(改變自己) - 改變
SuperView
的Bounds
(改變參照物)
-
CurrentView
的Bounds
改變Origin
是更新了本地坐標(biāo)系
原點(diǎn)的值
盆偿,但并沒有改變本地坐標(biāo)系
的位置(藍(lán)色坐標(biāo)系未動(dòng))。坐標(biāo)原點(diǎn)
作為SubView
的參照物准浴,參照物改變事扭,SubView
的frame
沒有變,造成SubView
在CurrentView
中絕對(duì)位置的移動(dòng)乐横。
通俗地講:
frame
調(diào)整自己的位置大小求橄,bounds
調(diào)整子視圖的位置大小
旋轉(zhuǎn)等矩陣操作是對(duì)世界坐標(biāo)
進(jìn)行變換今野,影響到frame
的改變,從而改變當(dāng)前視圖的大小位置等罐农。
Demo
TSScrollViewDemogit
地址条霜。