iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 5
0
自我挑戰組

iOS 筆記系列 第 5

frame、bounds 的差別 part 1

  • 分享至 

  • xImage
  •  

我覺得把這兩者放在一起比較得學只會更讓人混淆,我從 bounds 為基準來講好了

bounds

bounds 是用來描述一個 view 的位置及長寬的屬性,就跟我們一般對於一個長方形的認知一樣。

frame

frame 定義跟 bounds 差不多,差別在於 frame 描述的是相對於這個 view 的 superview 的位置及長寬。

假設有一個 label 長 100 寬 200 xy軸位置在(25, 25)

NSLog(@"bounds.origin.x: %f", label.bounds.origin.x);
NSLog(@"bounds.origin.y: %f", label.bounds.origin.y);
NSLog(@"bounds.size.width: %f", label.bounds.size.width);
NSLog(@"bounds.size.height: %f", label.bounds.size.height);

NSLog(@"frame.origin.x: %f", label.frame.origin.x);
NSLog(@"frame.origin.y: %f", label.frame.origin.y);
NSLog(@"frame.size.width: %f", label.frame.size.width);
NSLog(@"frame.size.height: %f", label.frame.size.height);
bounds.origin.x: 0
bounds.origin.y: 0
bounds.size.width: 100
bounds.size.height: 100

frame.origin.x: 25
frame.origin.y: 25
frame.size.width: 100
frame.size.height: 100

可以看到差別只有 frame 的 x, y 位置不同,因為它是基於這個 view 的 superview。

當這個 view 轉動時,frame 的長跟寬會改變;但 bounds 就跟我一開始說的一樣,跟我們一般認知的長寬一樣,長就是長,寬就是寬。
http://ithelp.ithome.com.tw/upload/images/20161205/20103561S95L4egCuh.jpg

我們來看 frame 的定義就知道為什麼 frame 會是那個大的方框了:

The frame rectangle, which describes the view’s location and size in its superview’s coordinate system.

翻成中文: frame 這個屬性是表示這個 view 在它的 superview 底下的位置以及長寬。

這個旋轉過的 view 對於它的 superview 來說,frame 的長寬並不是這個 view 自己本身的長寬(那是用 bounds 來表示的),而是 view 之於 superview 的長寬。

圖片來源:史丹佛 2016 的 iOS 課程第四堂課的教學簡報


上一篇
Debug、Release Mode
下一篇
super 系列 part1:super 是什麼?
系列文
iOS 筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言