UIViewController
视图控制器,程序界面的基础,每一个视图控制器代表着一个界面,每个界面的布局和业务逻辑我们都可以写在与之对应的控制器中,起到了代码分离,逻辑更加清晰的作用,同时也大大的分担了AppDelegate的压力
根视图控制器,每个应用程序只会有一个,相当于程序一运行就想显示出来的界面
loadView
这个方法 相当于把控制器self.view进行赋值
我们在没有重写的时候,会自动执行一遍父类的loadView ,所以才能够在下面使用self.view
如果我们重写了loadView方法,程序就会执行我们重写的loadView,如果这个重写的方法中,我们没有self.view = xxx的过程,程序就会崩溃
- (void)loadView{
[super loadView];
RootView *rootView = [[RootView alloc] init];
self.view = rootView;
[rootView release];
}
viewDidLoad
是视图加载的时候 会自动调用的方法
每一个视图控制器 都会有一个自带的view并且与屏幕同宽同高
我们铺界面的操作一般都写在这个方法中
当我们使用self.view addSubview:rootView时,是给控制器自带的view添加子视图,不会根据屏幕改变frame值
当我们使用self.view = rootView 时,是给控制器自带的view赋值,rootView会自动变成与屏幕同宽同高,并且会随着屏幕的旋转而变化;
- (void)viewDidLoad{
[super viewDidLoad];
//进行相关界面设置
}
viewWillAppear:
视图将要出现时自动调用的方法
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"视图将要出现");
}
viewDidAppear:
视图已经出现
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"视图已经出现");
}
viewWillDisappear:
视图将要消失
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"视图将要消失");
}
viewDidDisappear:
视图已经消失
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"视图已经消失");
}
以上四个方法,一般情况下不会重写,只有在我们有特殊需要的时候才会重写
viewController之间的切换
在没有navigation和tabBar的时候,我们一般用的是presentViewController: animated: completion:方法
- (void)buttonAction{
SecondViewController *SVC = [[SecondViewController alloc] init];
[self presentViewController:SVC animated:YES completion:nil];
[SVC release];
}
从第二个viewController返回时使用dismissViewControllerAnimated:completion:方法
- (void)button2Action{
//我们进行界面跳转都是前面的界面需要后面的界面的对象,而进行返回时后面的界面不需要前面的界面的对象
//几乎所有的跳转方式都是 一级一级的跳转 然后一级一级的返回
[self dismissViewControllerAnimated:YES completion:nil];
}
给视图控制器添加子视图控制器
在给视图控制器添加子视图控制器时,也要将子视图控制器的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];
屏幕旋转
步骤:
1.支持屏幕旋转 默认是支持
2.支持屏幕旋转的方向 默认支持三个方向 home键在左 home键在右
//设置是否支持屏幕旋转 默认是YES支持
- (BOOL)shouldAutorotate{
return YES;
}
//支持旋转的方向
//配合工程文件的设置
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAll;
}
配置文件.png
视图旋转时对界面进行重新铺设
- (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);
}
}
网友评论