UIViewController
視圖控制器,程序界面的基礎(chǔ),每一個(gè)視圖控制器代表著一個(gè)界面果复,每個(gè)界面的布局和業(yè)務(wù)邏輯我們都可以寫在與之對(duì)應(yīng)的控制器中缭裆,起到了代碼分離键闺,邏輯更加清晰的作用,同時(shí)也大大的分擔(dān)了AppDelegate的壓力
根視圖控制器澈驼,每個(gè)應(yīng)用程序只會(huì)有一個(gè)辛燥,相當(dāng)于程序一運(yùn)行就想顯示出來的界面
loadView
這個(gè)方法 相當(dāng)于把控制器self.view進(jìn)行賦值
我們?cè)跊]有重寫的時(shí)候,會(huì)自動(dòng)執(zhí)行一遍父類的loadView ,所以才能夠在下面使用self.view
如果我們重寫了loadView方法,程序就會(huì)執(zhí)行我們重寫的loadView挎塌,如果這個(gè)重寫的方法中徘六,我們沒有self.view = xxx的過程,程序就會(huì)崩潰
- (void)loadView{
[super loadView];
RootView *rootView = [[RootView alloc] init];
self.view = rootView;
[rootView release];
}
viewDidLoad
是視圖加載的時(shí)候 會(huì)自動(dòng)調(diào)用的方法
每一個(gè)視圖控制器 都會(huì)有一個(gè)自帶的view并且與屏幕同寬同高
我們鋪界面的操作一般都寫在這個(gè)方法中
當(dāng)我們使用self.view addSubview:rootView時(shí)勃蜘,是給控制器自帶的view添加子視圖硕噩,不會(huì)根據(jù)屏幕改變frame值
當(dāng)我們使用self.view = rootView 時(shí),是給控制器自帶的view賦值缭贡,rootView會(huì)自動(dòng)變成與屏幕同寬同高炉擅,并且會(huì)隨著屏幕的旋轉(zhuǎn)而變化;
- (void)viewDidLoad{
[super viewDidLoad];
//進(jìn)行相關(guān)界面設(shè)置
}
viewWillAppear:
視圖將要出現(xiàn)時(shí)自動(dòng)調(diào)用的方法
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"視圖將要出現(xiàn)");
}
viewDidAppear:
視圖已經(jīng)出現(xiàn)
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"視圖已經(jīng)出現(xiàn)");
}
viewWillDisappear:
視圖將要消失
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"視圖將要消失");
}
viewDidDisappear:
視圖已經(jīng)消失
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"視圖已經(jīng)消失");
}
以上四個(gè)方法阳惹,一般情況下不會(huì)重寫谍失,只有在我們有特殊需要的時(shí)候才會(huì)重寫
viewController之間的切換
在沒有navigation和tabBar的時(shí)候,我們一般用的是presentViewController: animated: completion:方法
- (void)buttonAction{
SecondViewController *SVC = [[SecondViewController alloc] init];
[self presentViewController:SVC animated:YES completion:nil];
[SVC release];
}
從第二個(gè)viewController返回時(shí)使用dismissViewControllerAnimated:completion:方法
- (void)button2Action{
//我們進(jìn)行界面跳轉(zhuǎn)都是前面的界面需要后面的界面的對(duì)象莹汤,而進(jìn)行返回時(shí)后面的界面不需要前面的界面的對(duì)象
//幾乎所有的跳轉(zhuǎn)方式都是 一級(jí)一級(jí)的跳轉(zhuǎn) 然后一級(jí)一級(jí)的返回
[self dismissViewControllerAnimated:YES completion:nil];
}
給視圖控制器添加子視圖控制器
在給視圖控制器添加子視圖控制器時(shí)快鱼,也要將子視圖控制器的view添加到父視圖控制器的view的子視圖組中
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
UIViewController *first = [[UIViewController alloc] init];
first.view.frame = CGRectMake(0,0,kScreenWidth,kScreenHeight);
[self.view addSubview:first.view];
[self addChildViewController:first];
[first release];
屏幕旋轉(zhuǎn)
步驟:
1.支持屏幕旋轉(zhuǎn) 默認(rèn)是支持
2.支持屏幕旋轉(zhuǎn)的方向 默認(rèn)支持三個(gè)方向 home鍵在左 home鍵在右
//設(shè)置是否支持屏幕旋轉(zhuǎn) 默認(rèn)是YES支持
- (BOOL)shouldAutorotate{
return YES;
}
//支持旋轉(zhuǎn)的方向
//配合工程文件的設(shè)置
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAll;
}
視圖旋轉(zhuǎn)時(shí)對(duì)界面進(jìn)行重新鋪設(shè)
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinatior:(id<UIViewControllerTransitionCoordinator>)coordinator{
if (size.width > size.height) {
NSLog(@"橫屏");
UIButton *btn = self.view.subviews[0];
UITextField *tf = self.view.subviews[1];
btn.frame = CGRectMake(100,100,100,100);
tf.frame = CGRectMake(200,100,100,100);
} else {
NSLog(@"豎屏");
UIButton *btn = self.view.subview[0];
UITextField *tf = self.view.subview[1];
btn.frame = CGRectMake(100,100,100,100);
tf.frame = CGRectMake(100,200,200,100);
}
}