> 原文:http://www.swiftyper.com/Swift/scrollviewpart1.html
# ScrollView 學習筆記 - Part1
`ScrollView`在iOS當中可謂是無處不在,從鎖屏畫面的滑動解鎖到手機的APP列表界面都用到了`ScrollView`,同時它還是兩相重量級控件`TableView`以及`CollectionView`的父類。
所以它可以說是相當有分量的一個控件,有必要進行一下系統的學習。
然而在學習`ScrollView`之前,必須要對一個`View`的`Frame`和`Bounds`有清晰的認識,因為這兩個屬性是理解`ScrollView`的基礎。
## Frame
`Frame`指的是一個view以**父視圖**的坐標系統為參考系的位置和大小。

所以圖中綠色view的`Frame`的位置是`(60, 80)`,長和寬都為200.
## Bounds
`Bounds`指的是一個view以**自身**的坐標系統為參考系的位置和大小。
事實上,因為`Bounds`始終以自身的坐標系為參考,所以它的位置永遠都是`(0, 0)`, 聽起來很奇怪,既然它永遠是0,我們還要`Bounds`做什么,一個`Frame`不就夠了么。表面上,`Bounds`是確實是多余的沒錯,但是當我們開始改變一個view的`Frame`與`Bounds`的位置的時候,我們就可以聽到其中的差別了。
## 改變Frame

圖中,白色view的`Frame`位置是`(0, 0)`,當我們將它設置為`(60, 80)`的時候,整個view會向右下方移動,這個是比較直觀的。
## 改變Bounds

但是,當我們改變view的`Bounds`的時候,它看起來好像是將`Frame`的位置設置為負數一樣,因為它看起來整個view都向左上方跑了,但是事實不是這樣的,它整個view的位置都沒有改變,而是view里面的內容,不再是從`(0, 0)`的位置開始顯示,變成了從`(60, 80)`的位置開始顯示,所以左上的部分沒有顯示在屏幕里面。
這跟`ScrollView`的原理是類似的,當我們“滾動”的時候,我們只是改變了屏幕里顯示的內容而已。
## 總結
`Frame`和`Bounds`是比較容易造成混淆,區別它們的不同點,對于理解`ScrollView`的原理有很大的幫助。在感到困惑的時候,可以畫下草圖來幫忙理解。