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

iOS開發(fā)創(chuàng)建frame實(shí)現(xiàn)window窗口view視圖示例

 更新時(shí)間:2022年05月17日 11:13:44   作者:davidzhang  
這篇文章主要為大家介紹了iOS開發(fā)創(chuàng)建frame實(shí)現(xiàn)window窗口view視圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

UIScreen類

要在屏幕上顯示內(nèi)容首先要?jiǎng)?chuàng)建一個(gè)窗口承載內(nèi)容,要?jiǎng)?chuàng)建一個(gè)窗口,需要一個(gè)邊框(frame),含有邊框信息的底層 結(jié)構(gòu)就CGRect。

每個(gè)能夠在屏幕上顯示自己的對(duì)象都有一個(gè)邊框,定義了他的顯示區(qū)域,不過許多高層的視圖類會(huì)自動(dòng)計(jì)算這一信息。其他的那些類則在視圖初始化時(shí)通過一個(gè)initWithFrame的初始化方法來設(shè)置。

再來認(rèn)識(shí)一個(gè)類:UIScreen。

UIScreen類代表了屏幕,通過這個(gè)類我們可以獲取一些想要的東東。

可使用下面的代碼測(cè)試一下:

    CGRect screenBounds = [ [UIScreen mainScreen]bounds];//返回的是帶有狀態(tài)欄的Rect
    CGRect viewBounds = [ [UIScreen mainScreen]applicationFrame];//不包含狀態(tài)欄的Rect
    //screenBounds 與 viewBounds 均是相對(duì)于設(shè)備屏幕來說的
    NSLog(@"screenBounds.origin.x:%f",screenBounds.origin.x);
    NSLog(@"screenBounds.origin.y:%f",screenBounds.origin.y);
    NSLog(@"screenBounds.size.width:%f",screenBounds.size.width);
    NSLog(@"screenBounds.size.height:%f",screenBounds.size.height);
    NSLog(@"viewBounds.origin.x:%f",viewBounds.origin.x);
    NSLog(@"viewBounds.origin.y:%f",viewBounds.origin.y);
    NSLog(@"viewBounds.size.width:%f",viewBounds.size.width);
    NSLog(@"viewBounds.size.height:%f",viewBounds.size.height);

輸出結(jié)果:

2014-08-13 17:47:02.647 BookInsect[20956:907] screenBounds.origin.x:0.000000

2014-08-13 17:47:02.649 BookInsect[20956:907] screenBounds.origin.y:0.000000

2014-08-13 17:47:02.651 BookInsect[20956:907] screenBounds.size.width:320.000000

2014-08-13 17:47:02.652 BookInsect[20956:907]screenBounds.size.height:480.000000

2014-08-13 17:47:02.653 BookInsect[20956:907] viewBounds.origin.x:0.000000

2014-08-13 17:47:02.655 BookInsect[20956:907] viewBounds.origin.y:20.000000

2014-08-13 17:47:02.657 BookInsect[20956:907] viewBounds.size.width:320.000000

2014-08-13 17:47:02.668 BookInsect[20956:907] viewBounds.size.height:460.000000

UIView

下面來認(rèn)識(shí)一下UIView類,這個(gè)類繼承自UIResponder,看這個(gè)名字我們就知道它是負(fù)責(zé)顯示的畫布,如果說把window比作畫框的話。我們就是不斷地在畫框上移除、更換或者疊加畫布,或者在畫布上疊加其他畫布,大小當(dāng)然 由繪畫者來決定了。有了畫布,我們就可以在上面任意施為了。這個(gè)類在UIView.h里面。

UIView* myView =[[ UIView alloc]initWithFrame:CGRectMake(0.0,0.0,200.0,400.0)];//這里創(chuàng)建了一塊畫布,定義了相對(duì)于父窗口的位置, 以及大小。 

UIWindow

UIWindow繼承自UIView,關(guān)于這一點(diǎn)可能有點(diǎn)邏輯障礙,畫框怎么繼承自畫布呢?不要過于去專牛角尖,畫框的形狀不就是跟畫布一樣嗎?拿一塊畫布然后用一些方法把它加強(qiáng),是不是可以當(dāng)一個(gè)畫框用呢?這也是為什么 一個(gè)view可以直接加到另一個(gè)view上去的原因了。
看一下系統(tǒng)的初始化過程(在application didFinishLauchingWithOptions里面):

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
self.window.backgroundColor = [UIColor grayColor];//給window設(shè)置一個(gè)背景色  
[self.window makeKeyAndVisible];//讓window顯示出來  

實(shí)戰(zhàn)演練一下:

1)新建一個(gè)工程選擇Empty Application名字為practice

2)在application didFinishLaunchingWithOptions里面,你會(huì)發(fā)現(xiàn)系統(tǒng)已經(jīng)建好一個(gè)畫框了,我們現(xiàn)在就用系統(tǒng)幫我們建好的畫框,你當(dāng)然也可以自己建一個(gè)畫框,不過沒這個(gè)必要了,忘了講了,一個(gè)應(yīng)用程序只能有一個(gè)畫框。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    CGRect bound = [[UIScreen mainScreen]bounds];
    NSLog(@"boundwith:%f    boundheight:%f",bound.size.width,bound.size.height);
    NSLog(@"boundx:%f    boundy:%f",bound.origin.x,bound.origin.y);
    CGRect appBound = [[UIScreen mainScreen]applicationFrame];
    NSLog(@"appBoundwith:%f    boundheight:%f",appBound.size.width,appBound.size.height);
    NSLog(@"appBoundx:%f    boundy:%f",appBound.origin.x,appBound.origin.y);    
    //畫第一塊畫布然涂成藍(lán)色,大小是320 X 100
    CGRect CGone = CGRectMake(0.0, 0.0, 320, 100);//畫個(gè)矩形,初始化位置與大小
    UIView *v_one = [[UIView alloc]initWithFrame:CGone];//初始化view
    v_one.backgroundColor = [UIColor blueColor];// 涂成藍(lán)色
    [self.window addSubview:v_one];//直接加到畫框上
    //第二塊注意它的位置
    CGRect CGtwo = CGRectMake(0.0, 100, 160, 100);//畫個(gè)矩形、初始化位置與大小
    UIView *v_two = [[UIView alloc]initWithFrame:CGtwo];//初始化view
    v_two.backgroundColor = [UIColor redColor];//涂成紅色
    [self.window addSubview:v_two];//疊加到畫框
    //第三塊注意他的位置
    CGRect CGthree = CGRectMake(160, 100, 160, 100);//
    UIView *v_three = [[UIView alloc]initWithFrame:CGthree];//
    v_three.backgroundColor = [UIColor greenColor];//
    [self.window addSubview:v_three];//
    //第四塊注意它的位置
    CGRect CGfour = CGRectMake(0.0, 260, 320, 200);//
    UIView *v_four = [[UIView alloc]initWithFrame:CGfour];//
    v_four.backgroundColor = [UIColor orangeColor];//
    [self.window addSubview:v_four];//
    //第五塊,計(jì)算一下它的位置,看看它的效果,
    //你可以讓試一下把這段代碼移到第一快初始化的上面試試,會(huì)有意想不到的效果
    CGRect CGfive = CGRectMake(100, 150, 160, 200);
    UIView *v_five = [[UIView alloc]initWithFrame:CGfive];
    v_five.backgroundColor = [UIColor yellowColor];
    [self.window addSubview:v_five];
    self.window.backgroundColor = [UIColor grayColor];//
    [self.window makeKeyAndVisible];//
    //最后記得release  
    v_one = nil;
    v_two = nil;
    v_three = nil;
    v_four = nil;
    v_five = nil;
    return YES;  
    //self.window.backgroundColor = [UIColor whiteColor];
    //[self.window makeKeyAndVisible];
    //return YES;
}

取得畫面工作區(qū)域的大小

iOS 可以在很多 Apple 的裝置上執(zhí)行,然而每個(gè)裝置所提供的工作區(qū)域大小 Application Frame 也不盡香同,下面提供一個(gè)簡(jiǎn)單的方法,幫助你可以快速找出目前工作區(qū)域的畫面的大小,程式碼如下。

1,首先是狀態(tài)列 Status Bar 的部份。

//取得StatusBar的位置和大小
[self.view addSubview:theToolbar];
 CGRect statusBarRect = [[UIApplication sharedApplication]statusBarFrame];
NSLog(@\"%@\", NSStringFromCGRect(statusBarRect));

2,再來是可工作區(qū)域的大小,如果你的應(yīng)用程式包含狀態(tài)列,那么可工作區(qū)域的大小就會(huì)是整個(gè)畫面的減去狀態(tài)列所剩下的區(qū)域。

//取得工作區(qū)域的位置和大小
CGRect workSpaceRect = [[UIScreen mainScreen]applicationFrame];
NSLog(@\"%@\", NSStringFromCGRect(workSpaceRect));

3,最后就是整個(gè)畫面的大小

//取得整個(gè)畫面的位置和大小
CGRect windowRect = [[UIScreen mainScreen]bounds];
NSLog(@\"%@\", NSStringFromCGRect(windowRect));

上述程式碼皆是將取得的大小范圍資訊儲(chǔ)存在 CGRect 型態(tài)的變數(shù)中,再將此變數(shù)以字串的方式顯示出來。

一些 UIView 中管理 Subview 常用的方法

一個(gè) UIView 里面可以包含許多的 Subview(其他的 UIView),而這些 Subview 彼此之間是有所謂的階層關(guān)系,這有點(diǎn)類似繪圖軟體中圖層的概念,下面程式碼示演示了幾個(gè)在管理圖層(Subview)上常用的方法,其程式碼如下。

首先是大家最常使用的新增和移除 Subview。

 //將Subview從當(dāng)前的UIView中移除
 [Subview removeFromSuperview];
 //替UIView增加一個(gè)Subview
 [UIView addSubview:Subview];

在 UIView 中將 Subview 往前或是往后移動(dòng)一個(gè)圖層,往前移動(dòng)會(huì)覆蓋住較后層的 Subview,而往后移動(dòng)則會(huì)被較上層的 Subview 所覆蓋。

 //將Subview往前移動(dòng)一個(gè)圖層(與它的前一個(gè)圖層對(duì)調(diào)位置)
 [UIView bringSubviewToFront:Subview];
 //將Subview往后移動(dòng)一個(gè)圖層(與它的后一個(gè)圖層對(duì)調(diào)位置)
 [UIView sendSubviewToBack:Subview];

在 UIView 中使用索引 Index 交換兩的 Subview 彼此的圖層層級(jí)。

 //交換兩個(gè)圖層
 [UIView exchangeSubviewAtIndex:indexA withSubviewAtIndex:indexB];

使用 Subview 的變數(shù)名稱取得它在 UIView 中的索引值(Index )。

 //取得Index
 NSInteger index = [[UIView subviews] indexOfObject:Subview名稱];

替 Subview 加上 NSInteger 的註記 (Tag),好讓之后它們分辨彼此

 //加上註記
 [Subview setTag:NSInteger];

最后是取得 UIView 中所有的 Subview,呼叫此方法會(huì)傳回一個(gè) NSArray,并以由后往前的順序列出這些 Subview,下圖中是列出范例圖片里 Root 中所有的 Subview。

 //取的UIView下的所有Subview
 [UIView subviews]

以上就是iOS開發(fā)創(chuàng)建frame實(shí)現(xiàn)window窗口view視圖示例的詳細(xì)內(nèi)容,更多關(guān)于iOS開發(fā)創(chuàng)建frame的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IOS面試大全之常見算法

    IOS面試大全之常見算法

    之前看了很多面試題,感覺要不是不夠就是過于冗余,于是我將網(wǎng)上的一些面試題進(jìn)行了刪減和分類,這篇文章先給大家分享一下IOS中的常見算法,有需要的可以參考借鑒。
    2016-09-09
  • 實(shí)例講解iOS應(yīng)用UI開發(fā)之基礎(chǔ)動(dòng)畫的創(chuàng)建

    實(shí)例講解iOS應(yīng)用UI開發(fā)之基礎(chǔ)動(dòng)畫的創(chuàng)建

    這篇文章主要介紹了iOS應(yīng)用UI開發(fā)之基礎(chǔ)動(dòng)畫的創(chuàng)建,以關(guān)鍵幀動(dòng)畫作為重要知識(shí)點(diǎn)進(jìn)行講解,需要的朋友可以參考下
    2015-11-11
  • iOS?block的值捕獲與指針捕獲詳解

    iOS?block的值捕獲與指針捕獲詳解

    Block它是C語(yǔ)言級(jí)別和運(yùn)行時(shí)方面的一個(gè)特征,下面這篇文章主要給大家介紹了關(guān)于iOS?block的值捕獲與指針捕獲的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • IOS 開發(fā)之 UITextField限制字?jǐn)?shù)的方法

    IOS 開發(fā)之 UITextField限制字?jǐn)?shù)的方法

    這篇文章主要介紹了IOS 開發(fā)之 UITextField限制字?jǐn)?shù)的方法的相關(guān)資料,這里提供實(shí)現(xiàn)限制最大字?jǐn)?shù)的方法,需要的朋友可以參考下
    2017-08-08
  • 僅幾行iOS代碼限制TextField輸入長(zhǎng)度

    僅幾行iOS代碼限制TextField輸入長(zhǎng)度

    這篇文章主要為大家詳細(xì)介紹了通過幾行iOS代碼限制TextField輸入長(zhǎng)度的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • IOS 自定義UIPickView詳解及實(shí)例代碼

    IOS 自定義UIPickView詳解及實(shí)例代碼

    這篇文章主要介紹了IOS 自定義UIPickView詳解及實(shí)例代碼的相關(guān)資料,這里寫個(gè)小實(shí)例及效果圖,附有實(shí)例代碼,需要的朋友可以參考下
    2016-12-12
  • Unity iOS混合開發(fā)界面切換思路解析

    Unity iOS混合開發(fā)界面切換思路解析

    這篇文章主要介紹了Unity iOS混合開發(fā)界面切換思路解析的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • iOS系統(tǒng)和微信中不支持audio自動(dòng)播放問題的解決方法

    iOS系統(tǒng)和微信中不支持audio自動(dòng)播放問題的解決方法

    最近在微信端開發(fā)H5的時(shí)候,audio標(biāo)簽在蘋果機(jī)上無法進(jìn)行自動(dòng)播放,查找相關(guān)資料終于解決了,所以下面這篇文章主要給大家介紹了關(guān)于iOS系統(tǒng)和微信中不支持audio自動(dòng)播放問題的解決方法,需要的朋友可以參考下。
    2017-09-09
  • iOS常用的公共方法詳解

    iOS常用的公共方法詳解

    本文主要介紹了iOS常用的公共方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2016-12-12
  • 詳解IOS的Automatically Sign在設(shè)備上打包

    詳解IOS的Automatically Sign在設(shè)備上打包

    本篇教程主要給大家分享了IOS的Automatically Sign如何在設(shè)備上直接打包,有需要的朋友參考學(xué)習(xí)下。
    2018-01-01

最新評(píng)論