亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡(jiǎn)述

Frame: 視圖的位置和大小使用是父視圖的坐標(biāo)系,所以將視圖放置在父級(jí)中這一點(diǎn)就很重要。 Bounds:視圖的位置和大小,使用的是其自己的坐標(biāo)系,而對(duì)于這一點(diǎn)而言將視圖的內(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 坐標(biāo)會(huì)在父視圖中移動(dòng)它。但是視圖本身看起來仍然完全一樣。Bounds并沒有不同。到目前為止,我們看到的FrameBounds的寬度和高度一直是完全相同的。然而這并不總是正確的。下面看看如果旋轉(zhuǎn)視圖片會(huì)發(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ū)別。

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

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

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

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

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"]];

相當(dāng)于下圖效果:

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

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

相當(dāng)于:

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

何時(shí)使用Frame,何時(shí)使用Bounds

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

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

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

相關(guān)文章

最新評(píng)論