亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

有關UIView、subview的幾個基礎知識點-IOS開發

系統 2564 0

環境是xcode4.3

?

首先要弄懂幾個基本的概念。

?

一)三個結構體:CGPoint、CGSize、CGRect

?

1. ?CGPoint

    /* Points. */  
  
struct CGPoint {  
  CGFloat x;  
  CGFloat y;  
};  
typedef struct CGPoint CGPoint;
  

看到這個想必你已經懂了,不再解釋。

?

2. ?CGSize

    /* Sizes. */  
  
struct CGSize {  
  CGFloat width;  
  CGFloat height;  
};  
typedef struct CGSize CGSize; 
  

不解釋。

?

3.CGRect

    /* Rectangles. */  
  
struct CGRect {  
  CGPoint origin;//偏移是相對父窗口的  
  CGSize size;  
};  
typedef struct CGRect CGRect; 
  

同樣 不解釋。

?

這三個結構體均在一個頭文件里:CGGeometry.h

?

二)幾個方法

?

1.CGRectMake

    CG_INLINE CGRect  
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)  
{  
  CGRect rect;  
  rect.origin.x = x; rect.origin.y = y;  
  rect.size.width = width; rect.size.height = height;  
  return rect;  
}  
  
?

沒錯,這個方法就是make一個rect,定好origin(起點,左上角),寬與高,就可以畫出一個位置與大小確定的rect(矩形)這個函數被聲明為內聯函數,一是因為它比較小,二是因為在畫界面時我們要求一定的效率。這個函數還是藏在剛剛那個頭文件里面:CGGeometry.h

?

三)幾個基本界面元素:window(窗口)、視圖(view)

?

要在屏幕上顯示內容首先要創建一個窗口承載內容,要創建一個窗口,需要一個邊框(frame),含有邊框信息的底層 結構就CGRect。每個能夠在屏幕上顯示自己的對象都有一個邊框,定義了他的顯示區域,不過許多高層的視圖類會自動計算這一信息。其他的那些類則在視圖初始化時通過一個initWithFrame的初始化方法來設置。

?

再來認識一個類:UIScreen。UIScreen類代表了屏幕,通過這個類我們可以獲取一些想要的東東。

    CGrect screenBounds = [ [UIScreen mainScreen]bounds];//返回的是帶有狀態欄的Rect  
CGRect viewBounds = [ [UIScreen mainScreen]applicationFrame];//不包含狀態欄的Rect  
//screenBounds 與 viewBounds 均是相對于設備屏幕來說的  
//所以 screenBounds.origin.x== 0.0 ;   screenBounds.oringin.y = 0.0;     
screenBounds.size.width == 320;  screenBounds.size.height == 480(或者其他分辨率有所差異)  
//所以 screenBounds.origin.x== 0.0 ;   screenBounds.oringin.y = 20.0;(因為狀態欄的高度是20像素)   screenBounds.size.width == 320;  screenBounds.size.height == 480  
  
?

UIView

?

下面來認識一下UIView類,這個類繼承自UIResponder,看這個名字我們就知道它是負責顯示的畫布,如果說把window比作畫框的話。我們就是不斷地在畫框上移除、更換或者疊加畫布,或者在畫布上疊加其他畫布,大小當然 由繪畫者來決定了。有了畫布,我們就可以在上面任意施為了。很多簡單的東西我會把庫里面的內容貼出來,如果東西太多貼出來就不太好,朋友們自己去庫文件里面看吧。這個類在UIView.h里面。下面我們先學習一些基礎的東西,其他的東東會在以后慢慢展開。

?

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

我們可以把這塊畫布加到其他畫布上,具體方法后面會講到。我們還可以在這塊畫布上畫上其它好玩的東東,具體情形后面會一一講解。

?

UIWindow

?

UIWindow繼承自UIView,關于這一點可能有點邏輯障礙,畫框怎么繼承自畫布呢?不要過于去專牛角尖,畫框的形狀不就是跟畫布一樣嗎?拿一塊畫布然后用一些方法把它加強,是不是可以當一個畫框用呢?這也是為什么 一個view可以直接加到另一個view上去的原因了。

?

看一下系統的初始化過程(在application didFinishLauchingWithOptions里面):

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

實戰演練:

?

沒結束我會用一個綜合的 例子來總結我的學習成果,徹底理解所學,我覺得既然選擇寫代碼,就要理解原理,否則只知其然不知其所以然是不能做一個好的程序員的。

?

1)新建一個工程選擇Empty Application ? 名字為LW1
2)在application didFinishLaunchingWithOptions里面,你會發現系統已經建好一個畫框了,我們現在就用系統幫我們建好的畫框,你當然也可以自己建一個畫框,不過沒這個必要了,忘了講了,一個應用程序只能有一個畫框。

?

    - (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);    
    
    //畫第一塊畫布然涂成藍色,大小是320 X 100
    CGRect CGone = CGRectMake(0.0, 0.0, 320, 100);//畫個矩形,初始化位置與大小
    UIView *v_one = [[UIView alloc]initWithFrame:CGone];//初始化view
    v_one.backgroundColor = [UIColor blueColor];// 涂成藍色
    [self.window addSubview:v_one];//直接加到畫框上
    
    //第二塊注意它的位置
    CGRect CGtwo = CGRectMake(0.0, 100, 160, 100);//畫個矩形、初始化位置與大小
    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];//
    //第五塊,計算一下它的位置,看看它的效果,
    //你可以讓試一下把這段代碼移到第一快初始化的上面試試,會有意想不到的效果
    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;
}
  
?

?

來源: http://blog.csdn.net/iukey/article/details/7083165

?

?

取得畫面工作區域的大小

?

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

?

?首先是狀態列 Status Bar 的部份。

     //取得StatusBar的位置和大小
 [self.view addSubview:theToolbar];
 CGRect statusBarRect = [[UIApplication sharedApplication]statusBarFrame];

 NSLog(@\"%@\", NSStringFromCGRect(statusBarRect));
  
?

?再來是可工作區域的大小,如果你的應用程式包含狀態列,那么可工作區域的大小就會是整個畫面的減去狀態列所剩下的區域。

     //取得工作區域的位置和大小
 CGRect workSpaceRect = [[UIScreen mainScreen]applicationFrame];

 NSLog(@\"%@\", NSStringFromCGRect(workSpaceRect));
  
?

?最后就是整個畫面的大小。

     //取得整個畫面的位置和大小
 CGRect windowRect = [[UIScreen mainScreen]bounds];

 NSLog(@\"%@\", NSStringFromCGRect(windowRect));
  
?

?上述程式碼皆是將取得的大小范圍資訊儲存在 CGRect 型態的變數中,再將此變數以字串的方式顯示出來。

?

來源: http://furnacedigital.blogspot.com/2011/10/blog-post_13.html

?

?

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

?

?

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

?

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

     //將Subview從當前的UIView中移除
 [Subview removeFromSuperview];

 //替UIView增加一個Subview
 [UIView addSubview:Subview];
  
?

?在 UIView 中將 Subview 往前或是往后移動一個圖層,往前移動會覆蓋住較后層的 Subview,而往后移動則會被較上層的 Subview 所覆蓋。

     //將Subview往前移動一個圖層(與它的前一個圖層對調位置)
 [UIView bringSubviewToFront:Subview];

 //將Subview往后移動一個圖層(與它的后一個圖層對調位置)
 [UIView sendSubviewToBack:Subview];
  
?

?在 UIView 中使用索引 Index 交換兩的 Subview 彼此的圖層層級。

     //交換兩個圖層
 [UIView exchangeSubviewAtIndex:indexA withSubviewAtIndex:indexB];
  
?

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

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

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

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

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

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

?

?

來源: http://furnacedigital.blogspot.com/2011/10/uiview-subview.html

?

?

?

有關UIView、subview的幾個基礎知識點-IOS開發 (實例)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久成人影院 | h片网站在线观看 | 亚洲日本在线观看视频 | 国产成人a毛片 | 中文字幕在线视频精品 | 欧美日韩亚毛片免费观看 | 久久亚洲欧美成人精品 | 久久精品亚洲精品国产欧美 | 久久久久久人精品免费费看 | 欧美日韩免费在线观看 | 国产精品一国产精品免费 | 九九99久久精品在免费线bt | 一级黄色毛片子 | 一级毛片在线免费播放 | 国产精品久久久久免费a∨ 国产精品久久久久免费视频 | 欧美成人老熟妇暴潮毛片 | 天天操大逼 | 欧美一级www片免费观看 | 亚洲欧美中文在线观看4 | 日日干夜夜草 | 亚洲国产成人久久综合碰 | 午夜视频在线观看网站 | 依人成人综合网 | 久久天天丁香婷婷中文字幕 | 久久综合一 | 久久久久久网址 | 牛牛影院免费永久地址 | 亚洲国产美女精品久久 | 欧美成人性做爰网站免费 | 激情午夜网 | 成人免费久久精品国产片久久影院 | 日韩不卡高清视频 | 欧美第一视频 | 九九热视频精品在线观看 | bbw老妇xxx| 久久精品伊人 | 亚洲国产精品欧美综合 | 免费高h影片在线观看 | 天天操人人干 | 伊人久久综合谁合综合久久 | 9999在线视频 |