為了學習相關(guān)的原理涣觉,使用Empty Application模板建立工程;
在開始輸入正常學習的代碼之前血柳,要先:
1官册、將ARC關(guān)閉;
2难捌、將AppDelegate.h文件中的屬性聲明里的strong改為retain膝宁,并在AppDelegate.m文件中重寫dealloc方法;
3根吁、在application:didFinishLaunchingWithOptions:方法中定義一個UIViewController员淫,并設為根視圖控制器;
Xcode7之后击敌,沒有根視圖控制器程序會崩潰介返,根視圖控制器也會被添加到父視圖的數(shù)組中,為了不影響我們操作view沃斤,將根視圖控制器寫在最后面
用宏定義將常用的數(shù)據(jù)比如屏幕寬高等圣蝎,設為宏;
擴充自己的庫衡瓶;
總是忘記設置背景顏色以及將view放到相應的父視圖中徘公;
frame要根據(jù)父視圖的坐標系設置;
在設置好了origin之后改變size時哮针,不是以view中心為參照進行縮放关面;
盡量不要用center的setter方法來設置view的位置
在設置屬性時用self.的setter方法使retainCount+1
在開辟空間的時候retainCount由0變1
所以屬性的引用計數(shù)是2
需要在放入父類之后對實例方法執(zhí)行一次release一次
定義好window后要將它設為key和可見坦袍;
[self.window makeKeyAndVisible];
創(chuàng)建window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//[UIScreen mainScreen].bounds 返回的是手機屏幕的frame屬性;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
創(chuàng)建視圖
UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.window addSubview:aView];
背景色
方法1
aView.backgroundColor = [UIColor redColor];
方法2
aView.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:1];
我們工作后一般用的是這種方法等太,可以用RGB值來設定顏色捂齐,因為工作時僅靠方法1中的幾種顏色已經(jīng)無法滿足我們的需求
colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue;
填入的顏色數(shù)據(jù)通常以n/255.0的形式來表現(xiàn),n就是RGB值缩抡;
隨機顏色
aView.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0
green:arc4random()%256/255.0
blue:arc4random()%256/255.0];
ps:加.0是因為兩個整數(shù)做除法只能生成整數(shù)
根據(jù)父視圖取子視圖
UIView *v = [[UIView alloc] init];
[self.window addSubview:v];
UIView *a = self.window.subviews[0];
subviews返回的是一個子視圖數(shù)組辛燥,可以用數(shù)組取值的方式按順序取出子視圖;
根據(jù)子視圖取父視圖
UIWindow *tempView = (UIWindow*)v.superview;
因為superview方法返回的是UIView類型的對象缝其,所以如果父視圖是window的話需要強轉(zhuǎn);
或者直接用UIView類型的指針來指向UIWindow的對象也可以徘六,這就是OC的多態(tài)内边;
透明度,隱藏待锈,刪除
UIView *tempSuperview = [[UIView alloc] init];
UIView *tempSubview = [[UIView alloc] init];
[self.window addSubview:tempSuperview];
[tempSuperview addSubview:tempSubview];
tempSuperview.alpha = 0.5;
//設置父視圖的透明度后漠其,子視圖也會相應透明,但子視圖的alpha屬性沒變竿音,如果子視圖的alpha屬性<1和屎,那么子視圖位置會顯示和父視圖融合后的背景色,否則顯示的是和父視圖相同的透明度的效果春瞬;
tempSuperview.hidden = YES;
//父視圖設置隱藏屬性為YES后柴信,子類也會隱藏,但子類的隱藏屬性不變
[tempSuperview removeFromSuperview];
//父視圖被從爺視圖刪除后宽气,子視圖也會消失随常;
//將被刪除的父視圖添加回來后,發(fā)現(xiàn)子視圖也在萄涯;
改變子視圖的位置
這幾個改變位置的方法只能對自己的子視圖用绪氛;
[self.window addSubview:tempSubview];//子視圖在已經(jīng)添加在父視圖的情況下,被添加到爺視圖上后涝影,父視圖中的子視圖會被自動刪除枣察;
//這個應該是在蘋果的內(nèi)部實現(xiàn)中設置的;
[self.window insertSubview:tempSubview aboveSubview:tempSuperview];
//把XX移動到XX下面燃逻;
[self.window insertSubview:tempSubview belowSubview:tempSuperview];
//把XX移動到XX上面序目;
//這樣改變位置后,數(shù)組下標會發(fā)生改變唆樊,說明誰壓著誰和數(shù)組的排序是一個聯(lián)動關(guān)系宛琅;
[self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
//交換兩個子視圖的下標
[self.window bringSubviewToFront:tempSuperview];
//將XX帶到最前面;
[self.window sendSubviewToBack:tempSuperview];
//將XX發(fā)送到最后面逗旁;
bounds
bounds返回的是一個CGRect類型的結(jié)構(gòu)體嘿辟,前兩個值是指視圖頂點對于它自身坐標系的位置舆瘪,后兩個值是視圖的size;
改變bounds的前兩個點的數(shù)據(jù)不會改變視圖本身的位置,但會使視圖自身的坐標系原點發(fā)生改變量的相對位移红伦,由于坐標系原點被改變了英古,相對于這個原點所設置的子視圖的位置也會被改變;
所以這是一種一次性操作所有子視圖的方法昙读,雖然只是位置召调,但我想在某些情況下會產(chǎn)生指導意義;