深入UIScrollView系列一(滑動屬性)

在介紹UIScrollView滑動之前,我們先需要了解一些概念禀综,首先給大家介紹frame撩满,bounds并鸵。

-(CGRect)frame{    
    return CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
}

-(CGRect)bounds{    
    return CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}

frame:描述了該視圖在superview坐標(biāo)系統(tǒng)中的位置和大小级零。(顯示大杏实)
bounds:描述了該視圖在其自身坐標(biāo)系中的位置和大小舀瓢。(實(shí)際大型⒀拧)

frame和bounds區(qū)別:

  1. frame是顯示位置和大小(即可見區(qū)域)京髓,bounds是實(shí)際大小航缀。
  2. frame是相對于superView坐標(biāo)系,bounds是相對于self坐標(biāo)系(即為自身和subView提供坐標(biāo)系)堰怨。
  3. 修改bounds原點(diǎn)就是修改self坐標(biāo)系統(tǒng)的原點(diǎn)谬盐,修改bounds原點(diǎn)對frame沒有影響。(比如要同時移動所有 subViews 的話诚些,改 bounds 的 origin 是一個很簡單的辦法飞傀。)
  4. view的frame和bounds的大小總是一樣的,除非用了transform诬烹。
  5. 修改transform屬性改變的是frame砸烦,bounds不會變化。比如绞吁,transform旋轉(zhuǎn)后幢痘,frame的大小是其外接矩形的大小。
  6. 繪制的顯示區(qū)域是這樣:
CompositedPosition.x = View.frame.origin.x - Superview.bounds.origin.x;   
CompositedPosition.y = View.frame.origin.y - Superview.bounds.origin.y; 

所以修改superview.bounds.origin對顯示區(qū)域有影響家破。frame在superview.bounds.origin在原點(diǎn)的時候才表示可見區(qū)域颜说。


下面我們再來看看UIScrollView的相關(guān)屬性,UIScrollView分解如下圖:

圖一:scrollView概念圖.jpg
圖二:scrollView坐標(biāo)系.jpg

contentSize是內(nèi)容要滾動的區(qū)域大刑(比如圖一的相片大忻欧唷),
contentInset相當(dāng)于內(nèi)容邊距烹困,也就是內(nèi)容視圖邊緣和scrollView的邊緣的留空距離玄妈,通常在需要刷新內(nèi)容時用到(類似android內(nèi)邊距padding,圖一相片四個邊框)髓梅,
contentOffset是內(nèi)容偏移拟蜻,描述了內(nèi)容視圖相對于scrollView窗口的位置(當(dāng)然是向上向左的偏移量)(圖二)

滾動的關(guān)鍵屬性bounds:
bounds確定了顯示區(qū)域大小,相對于UIScrollView的subviews而言枯饿,修改bounds原點(diǎn)就是在修改UIScrollView顯示區(qū)域酝锅。
即,我們可以得出結(jié)論奢方,在UIScrollView的frame和其subViews的frame未變化的情況下搔扁,修改bounds原點(diǎn)就相當(dāng)于在平面上移動這個可視區(qū)域擒权!
而滾動的時候,UIScrollView的frame和其subViews的frame不會變化阁谆。所以改變bounds原點(diǎn)碳抄,就是滾動!

滾動.gif

總結(jié):

  1. UIScrollView由contentInset和contentSize組成场绿。
  2. bounds大小初始默認(rèn)等于frame大小剖效。
  3. contentOffset其實(shí)改變的是bounds.origin。
    UIScrollView.bounds.origin = contentOffset
  4. 滾動到底contentOffset.y = contentSize.height - bounds.size.height;
  5. UIScrollView坐標(biāo)系原點(diǎn)是從contentSize開始的焰盗;contentOffset表示顯示區(qū)域左上角相對于contentSize坐標(biāo)系的坐標(biāo)璧尸。
  6. contentOffset的最大和最小值是表示邊界(即邊界觸發(fā)彈性回歸)。
  7. contentInset屬性擴(kuò)充了滾動區(qū)域熬拒,其改變contentOffset的最大和最小值爷光,即改變了彈性回歸的邊界。比如contentInset=(10,0,0,0)->offset=-10澎粟。
  8. 滾動的理解就是修改bounds屬性蛀序。往上滑:屏幕不變,內(nèi)容往上滑活烙,offset變大徐裸。

彩蛋:
contentInset常常用來擴(kuò)充滾動區(qū)域。
比如設(shè)置tableView底部的Inset避免內(nèi)容被上層遮擋啸盏。
比如tableView下拉刷新重贺,如果你將RefreshUI(刷新控件)放在contentSize,那么彈性回歸將是RefreshUI彈回頂點(diǎn)回懦,而不是Cell气笙。

當(dāng)刷新動作pull-to-refresh初始化時,content inset已經(jīng)被校正過怯晕,所以content offset的最小值包含了完整的refresh control潜圃。當(dāng)刷新完成后,content inset恢復(fù)正常贫贝,content offset也跟著適應(yīng)大小秉犹,自動彈性回歸。這里并不需要為content size做數(shù)學(xué)計(jì)算稚晚。(這里可能比較難理解,建議看看EGOTableViewPullRefresh這樣的類庫就應(yīng)該明白了) UIScrollView滾動原理和contentInset原理(裝載)

此文到此結(jié)束型诚,文中圖片來源引用客燕!
請繼續(xù)關(guān)注下文,《深入UIScrollView系列二(滑動事件)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載狰贯,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者也搓。
  • 序言:七十年代末赏廓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子傍妒,更是在濱河造成了極大的恐慌幔摸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颤练,死亡現(xiàn)場離奇詭異既忆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嗦玖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門患雇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宇挫,你說我怎么就攤上這事苛吱。” “怎么了器瘪?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵翠储,是天一觀的道長。 經(jīng)常有香客問我橡疼,道長彰亥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任衰齐,我火速辦了婚禮任斋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耻涛。我一直安慰自己废酷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布抹缕。 她就那樣靜靜地躺著澈蟆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卓研。 梳的紋絲不亂的頭發(fā)上趴俘,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音奏赘,去河邊找鬼寥闪。 笑死,一個胖子當(dāng)著我的面吹牛磨淌,可吹牛的內(nèi)容都是我干的疲憋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼梁只,長吁一口氣:“原來是場噩夢啊……” “哼缚柳!你這毒婦竟也來了埃脏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤秋忙,失蹤者是張志新(化名)和其女友劉穎彩掐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灰追,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡堵幽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了监嗜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谐檀。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖裁奇,靈堂內(nèi)的尸體忽然破棺而出桐猬,到底是詐尸還是另有隱情,我是刑警寧澤刽肠,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布溃肪,位于F島的核電站,受9級特大地震影響音五,放射性物質(zhì)發(fā)生泄漏惫撰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一躺涝、第九天 我趴在偏房一處隱蔽的房頂上張望厨钻。 院中可真熱鬧,春花似錦坚嗜、人聲如沸夯膀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诱建。三九已至,卻和暖如春碟绑,著一層夾襖步出監(jiān)牢的瞬間俺猿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工格仲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留押袍,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓抓狭,卻偏偏與公主長得像伯病,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子否过,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容