iOS中的屏幕的旋转(UIViewController)横屏竖屏

时间:2023-01-23 15:09:16

RootViewController

//视图控制器(UIViewController):它不是视图,用来管理视图,所以屏幕上看不到,但是自身携带一个视图(根视图)
#import "RootViewController.h"
#import "LoginView.h"
//视图控制器的延展
@interface RootViewController ()

@end
//视图控制器的实现部分
@implementation RootViewController

//用来加载视图控制器的根视图,此方法源于父类
- (void)loadView
{
    LoginView *logview = [[LoginView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //指定刚才创建的  自定义视图 对象为当前视图控制器的根视图
    self.view = logview;
    
    [logview release];
}

//该方法是在loadView执行完之后立即执行的方法
//当访问视图控制器的View为空,一但发现View为空,立即调用loadView来加载根视图
//如果要自定义视图控制器的根视图,只需要重写loadView方法,在loadView方法中完成创建,并指定当前试图控制器的根视图即可
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
   // self.view.backgroundColor = [UIColor redColor];


    
}
#pragma mark -- 检测和处理屏幕的旋转
//1.设置屏幕支持的旋转方向
- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskAll;
    
}
//开始旋转时会触发的方法
//经常用来暂停播放器播放,暂停视屏播放,以及关闭用户交互

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
      [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
//当旋转结束是时触发
//继续音乐,视频播放,以及打开的用户交互
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
}

//当将要开始旋转做动画时触发,经常用来在旋转时添加自定义动画
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    
    
    
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
    
    
    
}
#pragma ---视图控制器控制布局视图的方法
//当视图旋转时,视图控制器触发的方法,用于重新布局视图控制器根据视图上得子视图
- (void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
}











//当视图控制器收到内存警告时触发
//释放之前未使用的空间,以及可以重建的对象.
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    //1.视图控制器的根视图是够已经成功加载
    //2.当前根视图是否正在显示
    //[self isViewLoaded]判断视图是否成功加载
    //self.view.window,判读视图是否在当前界面
    //内存加载成功,且不在当前界面
    if ([self isViewLoaded] && !self.view.window) {
        [self.view release];
    }
}



@end

LoginView.h

#import <UIKit/UIKit.h>

@interface LoginView : UIView
//最简单的自定义视图封装:直接将控件声明为属性,在.h中声明外界访问的接口.
@property (nonatomic,retain) UILabel *aLabel;
@property (nonatomic, retain)UITextField *textField;
@property (nonatomic, retain)UIButton *loginBtn;
@end

LoginView.m

#import "LoginView.h"
#define kMargin_Left_Label      30
#define kMargin_Top_Label       100
#define kWidth_Label            60
#define kHeight_Label           30
#define kMargin_Left_TextField  (kMargin_Left_Label + kWidth_Label + 20)
#define kMargin_Top_TextField   100
#define kWidth_TextField        150
#define kHeight_TextField       30
#define KMargin_Left_Button     100
#define kmargin_Top_Button      (kMargin_Top_Label + kHeight_Label + 30)
#define kWidth_Button           80
#define kHeight_Button          40
@implementation LoginView


//原则:如果重写父类继承来方法是,如果不知道父类对该方法的事项,则调用父类对该方法的实现(super).

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if(self)
    {
        [self setupLabel];
        
        [self setupButton];
        
        [self setupTextField];
    }
    return self;
}

//用户名Label
- (void)setupLabel
{
    self.aLabel = [[UILabel alloc] init];
    self.aLabel.text = @"用户名";
    self.aLabel.frame = CGRectMake(kMargin_Left_Label,kMargin_Top_Label , kWidth_Label, kHeight_Label);
    [self addSubview:self.aLabel];
    [self.aLabel release];
}
//输入框
- (void)setupTextField{
    self.textField = [[UITextField alloc] init];
    self.textField.placeholder = @"请输入用户名";
    self.textField.borderStyle = UITextBorderStyleRoundedRect;
    self.textField.frame = CGRectMake(kMargin_Left_TextField, kMargin_Top_TextField, kWidth_TextField, kHeight_TextField);
    [self addSubview:self.textField];
    [self.textField release];
}
//登陆按钮
- (void)setupButton
{
    self.loginBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    [self.loginBtn setTitle:@"登陆" forState:UIControlStateNormal];
    self.loginBtn.frame = CGRectMake(KMargin_Left_Button, kmargin_Top_Button, kWidth_Button, kHeight_Button);
    [self addSubview:self.loginBtn];
}

//该方法为视图的方法,当旋转时,视图会自动的调用该方法用来重新布局子视图.
- (void)layoutSubviews{
    [super layoutSubviews];
    //1.获取当前屏幕所处的状态(旋转方向)
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    //2.判断屏幕方向,调整子视图
    switch (orientation) {
        case UIInterfaceOrientationPortrait:
          //  NSLog(@"竖屏");
            //break;
            
     
        case UIInterfaceOrientationPortraitUpsideDown:
           // NSLog(@"倒置");
            self.loginBtn.frame = CGRectMake(KMargin_Left_Button, kmargin_Top_Button, kWidth_Button, kHeight_Button);
            break;
        case UIInterfaceOrientationLandscapeLeft:
           // NSLog(@"右横屏");
            //break;
       
        case UIInterfaceOrientationLandscapeRight:
           // NSLog(@"左横屏");
             self.loginBtn.frame = CGRectMake(kMargin_Left_TextField + kWidth_TextField + 30, kMargin_Top_Label, kWidth_Button, kHeight_Button);
            break;
        default:
            break;
    }
}

- (void)dealloc
{
    
    [_aLabel release];
    [_textField release];
    [_loginBtn release];
    [super dealloc];
    
}
@end