欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開發(fā)frame和bounds使用示例詳解

 更新時間:2022年09月19日 14:57:14   作者:BillyBilly  
這篇文章主要為大家介紹了iOS開發(fā)frame和bounds使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

簡述

Frame: 視圖的位置和大小使用是父視圖的坐標系,所以將視圖放置在父級中這一點就很重要。 Bounds:視圖的位置和大小,使用的是其自己的坐標系,而對于這一點而言將視圖的內(nèi)容或子視圖放置在其自身內(nèi)很重要。

frame和bounds

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[superView addSubview:imageView];

Frame origin = (0, 0) width = 100 height = 100

Bounds origin = (0, 0) width = 100 height = 100

該圖片中的FrameBounds完全相同。

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 50, 100, 100)];
[superView addSubview:imageView];

Frame origin = (10, 50) width = 100 height = 100

Bounds origin = (0, 0) width = 100 height = 100

改變Frame的 x、y 坐標會在父視圖中移動它。但是視圖本身看起來仍然完全一樣。Bounds并沒有不同。到目前為止,我們看到的FrameBounds的寬度和高度一直是完全相同的。然而這并不總是正確的。下面看看如果旋轉(zhuǎn)視圖片會發(fā)生什么。

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 50, 100, 100)];
[superView addSubview:imageView];
imageView.transform = CGAffineTransformMakeRotation(M_PI * 0.05);

可以看到Bounds仍然相同,但是Frame已經(jīng)發(fā)生了更改?,F(xiàn)在更容易看出framebounds之間的區(qū)別。

視圖的框架被定義為該視圖相對于其父坐標系的最小邊界框,包括應(yīng)用于該視圖的任何變換。在這里,可以看到邊界大小和幀大小完全不同。這一點非常重要:視圖的框架是相對于其父級坐標系的位置和大小。視圖的邊界是相對于其自身坐標系的位置和大小。圖中兩個不同坐標系(黑色和藍色的)可以幫我們更好地理解。

文檔里說:Note: When modifying the transform property of your view, all transformations are performed relative to the center point of the view.,修改transform視圖的屬性時,所有轉(zhuǎn)換都是相對于視圖的中心點執(zhí)行的。

也就是說,我們進行transform后,再去修改視圖位置最好使用center屬性來修改。

到目前為止,Bounds原點是一直停留在 (0, 0)的,不過也不一定是這樣的。如果我們的視圖有一個很大的子視圖,它太大而無法一次顯示呢?

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(150, 100, 120, 200)];
[self.view addSubview:view2];
view2.clipsToBounds = YES;
//    view2.bounds = CGRectMake(50, 0, 120, 200);
UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(-50, 50, 200, 200)];
[view2 addSubview:imageView2];
[imageView2 setImage:[UIImage imageNamed:@"pic.jpg"]];

相當于下圖效果:

此時bounds的原點為(0, 0)。倘若我們現(xiàn)在改變bounds的原點,會發(fā)生什么呢?

view2.bounds = CGRectMake(50, 0, 120, 200);

相當于:

從原坐標原點相對于大子視圖的位置,再進行相對的移動。視圖在父視圖中沒有移動,但是視圖里面的內(nèi)容發(fā)生了變化。這其實和我們常用的UIScrollView系列控件的思想是一樣的。大的子視圖相當于畫布,改變bounds更改的是顯示畫布的區(qū)域。

何時使用Frame,何時使用Bounds

由于frame關(guān)聯(lián)視圖在其父視圖中的位置,因此您在進行向外更改時會使用它,例如更改其寬度或查找視圖與其父視圖頂部之間的距離。

使用bounds時,你正在向內(nèi)變化,就像畫的東西或視圖中安排子視圖。如果您對它進行了一些轉(zhuǎn)換,還可以使用bounds來獲取視圖的大小。

以上就是iOS開發(fā)frame和bounds使用示例詳解的詳細內(nèi)容,更多關(guān)于iOS開發(fā)frame bounds的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論