UIViewController和屏幕旋转

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;
}
UIViewController和屏幕旋转_第1张图片
配置文件.png

视图旋转时对界面进行重新铺设

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinatior:(id)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);
    }
}

你可能感兴趣的:(UIViewController和屏幕旋转)