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

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
时间: 2024-11-25 05:17:52

iOS中的屏幕的旋转(UIViewController)横屏竖屏的相关文章

使所有页面都屏幕不能旋转(始终竖屏)

是不是很想有一种方法,使写一次代码,就可以使所有的页面屏幕都在不旋转(即在屏幕转的时候,字幕并不会改变) 首先上下结构图: 上代码: #import "AppDelegate.h" #import "RootViewController.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic

cocos2d-x 设置屏幕方向 横屏 || 竖屏

cocos2d-x 设置屏幕方向 横屏 || 竖屏 需要根据各个平台分别进行设置. android 修改项目根目录 proj.android\AndroidManifest.xml 文件中的android:screenOrientation属性值,portrait 为竖屏,landscape为横屏 Windows 直接用cocos引擎接口中的GLView::createWithRect方法指定窗口大小,需要注意的是,该方法在android环境下会报错,并导致程序崩溃,所以我们需要在代码里面这么写

HTML5中判断横屏竖屏

HTML5中判断横屏竖屏 在移动端中我们经常碰到横屏竖屏的问题,那么我们应该如何去判断或者针对横屏.竖屏来写不同的代码呢. 这里有两种方法: 一:CSS判断横屏竖屏 写在同一个CSS中 1 2 3 4 5 6 @media screen and (orientation: portrait) {   /*竖屏 css*/ } @media screen and (orientation: landscape) {   /*横屏 css*/ } 分开写在2个CSS中 竖屏 1 <link rel=

Phonegap 禁止手机横屏竖屏自动旋转

方法: 在AndroidManifest.xml的<activity>标签里面加入下面代码 android:screenOrientation=”portrait”属性即可(portrait是纵向,landscape是横向),事例代码如下: <activity android:name="com.example.test.MainActivity" android:label="@string/app_name" android:screenOri

javascript判断手机旋转横屏竖屏

javascript判断手机旋转横屏竖屏 // 横屏竖屏函数 function orientationChange(){ switch(window.orientation) { case 0: // Portrait case 180: // Upside-down Portrait //Javascript to setup Portrait view window.location.reload(); break; case -90: // Landscape: turned 90 deg

Android学习笔记(三六):横屏竖屏的切换

1.准备环境 对模拟器,只要“Ctrl+F12“,就可以可以实现竖屏(portrait)和横屏(landscape)的切换. 2.UI的屏幕切换实现 下面一个简单的例子,如图. 我们需要写两个Android XML文件,假定文件为chapter_19_test1.xml,放在常规目录位置layout/内容如下: [plain] view plaincopy <?xml version="1.0" encoding="utf-8"?> <Linear

【转】Android 模拟器横屏竖屏切换设置

http://blog.csdn.net/zanfeng/article/details/18355305# Android 模拟器横屏竖屏切换设置时间:2012-07-04   来源:设计与开发   作者:Daniel   点击:5571 摘要:  Android 模拟器旋转,横屏.竖屏切换设置,android 横屏布局,android 横屏模式,android 模拟器,android 模拟器横屏,android 模拟...       Android 模拟器旋转,横屏.竖屏切换设置,andr

CSS3判断手机横屏竖屏

原理: 当用户旋转屏幕的时候,会进入到你的监听方法中,然后通过window.orientation来获取当前屏幕的状态:0 - 竖屏90 - 逆时针旋转横屏-90 - 顺时针旋转横屏180 - 竖屏,上下颠倒 如果你不希望用户使用横屏方式查看你的网页,你可以在设备旋转时间监听里面对body使用CSS3里面的transition中的旋转来保持页面竖向. 移动设备上的页面,当屏幕旋转的时候会有一个orientationchange事件.你可以给body元素增加此事件的监听: <body onorie

Android之横屏竖屏显示问题

1.采用不同的布局文件 res文件下 选中layout  Ctrl+C 选中res Ctrl +V 创建layout-land横屏显示的layout 同理创建layout-port竖屏显示的layout 图片横屏竖屏 选中drawable-xhdpi Ctrl+C 选中res Ctrl + V 创建drawable-land-xhdpi 其他分辨率的也一样 字符串 values-land values-port 另外:(layout文件夹也可以使用hdip,mdip等关键字命名如layout-h