美文网首页程序员
UIViewController和屏幕旋转

UIViewController和屏幕旋转

作者: 每日总结 | 来源:发表于2016-03-19 17:49 被阅读2043次

    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);
        }
    }

    相关文章

      网友评论

        本文标题:UIViewController和屏幕旋转

        本文链接:https://www.haomeiwen.com/subject/amktlttx.html