zoukankan      html  css  js  c++  java
  • Autorotation and Autosizing

    配置应用级别的旋转方向——Global Setting

    方法:点击项目-General-Deployment-Device Orientation

    It doesn’t necessarily mean that every view in your application will use all of the selected orientations; but if you’re going to support an orientation in any of your application’s views, that orientation must be selected here.

    配置视图级别的旋转方向——Local Setting

    方法:ViewController.m中

    - (NSUInteger)supportedInterfaceOrientations
    {
        return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft);
    }

    同一个App的不同视图,旋转方向的限制可能不一样。只能在应用级别的旋转方向上限制更多,比如应用级别不支持Upside-down,视图级别也一定不行。

    附,旋转方向:

    • UIInterfaceOrientationMaskPortrait
    • UIInterfaceOrientationMaskLandscapeLeft
    • UIInterfaceOrientationMaskLandscapeRight
    • UIInterfaceOrientationMaskPortraitUpsideDown
    • UIInterfaceOrientationMaskLandscape
    • UIInterfaceOrientationMaskAll
    • UIInterfaceOrientationMaskAllButUpsideDown

    旋转,横竖视图排版一样

    添加四个角(1,2,5,6)的Label

    全选四个角(1,2,5,6)的Label,选择Editor -> Resolve Auto Layout Issues -> Add Missing Constraints

    添加中间(3,4)的Label,对齐

    左中(3)Editor -> Align -> Vertical Center in Container

    右中(4)Editor -> Resolve Auto Layout Issues -> Add Missing Constraints

     

    (1,2)加背景颜色,调整它们的宽度(随便,不一定等宽)

     

    (1,2) Editor -> Pin -> Horizontal Spacing(无论怎么旋转都不等宽)


    (1,2) Editor -> Pin -> Widths Equally(无论怎么旋转都等宽)

    旋转,横竖视图排版不一样

    创建SingleViewApplication,在View的File Inspector中取消AutoLayout,我们要利用代码实现布局。
    在Main.storyboard中拖入一个View和4个Button,并设置该View的背景颜色。

    ViewController.m中实现代码

    旋转的时候就自动调用

    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    {
        [self adjustLayout:toInterfaceOrientation];
    }
    - (void)adjustLayout:(UIInterfaceOrientation)toInterfaceOrientation
    {
        if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
        {
            [self layoutPortrait];
        }
        else
        {
            [self layoutLandscape];
        }
    }
    static const CGFloat btnHeight = 40;
    static const CGFloat btnWidth = 120;
    static const CGFloat spacing = 20;
    
    - (void)layoutPortrait
    {
        CGRect b = self.view.bounds;
        CGFloat contentHeight = CGRectGetHeight(b)-btnHeight*2-spacing*4;
        CGFloat contentWidth = CGRectGetWidth(b) - spacing*2;
        self.contentView.frame = CGRectMake(spacing, spacing, contentWidth, contentHeight);
        
        CGFloat btn1x = spacing;
        CGFloat btn2x = CGRectGetWidth(b)-spacing-btnWidth;
        CGFloat btn1y = contentHeight+2*spacing;
        CGFloat btn2y = btn1y+btnHeight+spacing;
        
        self.btn1.frame = CGRectMake(btn1x, btn1y, btnWidth, btnHeight);
        self.btn2.frame = CGRectMake(btn2x, btn1y, btnWidth, btnHeight);
        self.btn3.frame = CGRectMake(btn1x, btn2y, btnWidth, btnHeight);
        self.btn4.frame = CGRectMake(btn2x, btn2y, btnWidth, btnHeight);
    }
    
    - (void)layoutLandscape
    {
        CGRect b = self.view.bounds;
        CGFloat contentHeight = CGRectGetHeight(b)-spacing*2;
        CGFloat contentWidth = CGRectGetWidth(b) - spacing*3-btnWidth;
        self.contentView.frame = CGRectMake(spacing, spacing, contentWidth, contentHeight);
        
        CGFloat btnx = CGRectGetWidth(b)-spacing-btnWidth;
        CGFloat btny1 = spacing;
        CGFloat btny4 = CGRectGetHeight(b)-spacing-btnHeight;
        CGFloat btny2 = btny1+(btny4-btny1)/3.0;
        CGFloat btny3 = btny2+(btny4-btny1)/3.0;
        
        self.btn1.frame = CGRectMake(btnx, btny1, btnWidth, btnHeight);
        self.btn2.frame = CGRectMake(btnx, btny2, btnWidth, btnHeight);
        self.btn3.frame = CGRectMake(btnx, btny3, btnWidth, btnHeight);
        self.btn4.frame = CGRectMake(btnx, btny4, btnWidth, btnHeight);
    }
    View Code

    viewDidLoad只在程序启动时调用了一次;屏幕旋转的时候没有调用它,调用的是- (void)willAnimateRotationToInterfaceOrientation:duration:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
      //处理启动时不是默认竖屏的情况。 UIApplication *app = [UIApplication sharedApplication]; UIInterfaceOrientation currentOrientation = app.statusBarOrientation; [self adjustLayout:currentOrientation]; }

    效果

  • 相关阅读:
    jdk7_ConcurrentHashMap 图示
    Teradata 日期函数
    Teradata正则表达式
    Teradata sql去除字段中的字母/数字
    sql查询连续3天有交易记录的客户
    批量生成sql查询语句
    sql查询字段中是否含有字母/数字/符号
    sql查询每个人最新的2个电话号码
    python连接Teradata数据库
    dos命令获取文件行数
  • 原文地址:https://www.cnblogs.com/chenyg32/p/3862655.html
Copyright © 2011-2022 走看看