ios ipad:在横向模式下将TabBar旋转到左侧,并进行变换和约束更新

时间:2015-03-16 19:25:09

标签: ios ipad rotation constraints transform

我正在创建一个ios IPad应用,其底部有一个UITabBar控件,其中有3个MenuItems。通常,当我旋转设备时,标签栏将保持在横向底部。我希望TabBar在横向模式下向左侧旋转,并成为垂直表示。如果可能的话,我不想创建带按钮的UIView,因为我喜欢同一个对象来管理它们,我喜欢普通TabBar的便利性。

我的计划是检测设备位置,并使用UITransform将TabBar旋转90度。让我们暂时忽略内部的图标和文本旋转,只关注整个TabBar本身。

旋转工作,除了它使屏幕底部中心的垂直TabBar看起来非常不合适。接下来的任务是将其约束到左墙。通常我使用3个约束来将TabBar保持在左/下/右侧。我在找到正确的约束条件时遇到了很多麻烦,无法正确地将其保留在左侧。

一个主要问题是,一旦完成变换,高度和宽度属性在标签栏上反转(或转换)。如此之高使得屏幕更宽,宽度更高。使用顶部/底部约束以及高度49是看似需要的,除了顶部/底部+高度组合导致约束冲突。

我附加了当前合理工作的约束逻辑,但我无法弄清楚为什么我需要对这些值进行硬编码,如图所示。这是获得左侧视觉输出的唯一方法。我想知道是否有更简洁的方法来执行此操作,可能没有常量的硬编码值。

我也不确定如何在下一步中旋转文字+图标。

附件也是当前的样子。清楚地说明是绿色的,但最终会是透明的,因此景观顶部的截止点不会成为问题。

- (void) adjustViewsForOrientation:(UIInterfaceOrientation) orientation {

    switch (orientation)
    {
        case UIInterfaceOrientationPortrait:
        case UIInterfaceOrientationPortraitUpsideDown:
        {
            //load the portrait view

            // revert to normal transform 
            _tabBar.transform = CGAffineTransformRotate(CGAffineTransformIdentity, M_PI*2);


            [self.view  removeConstraint:_tabbarConstraintT];
            [self.view  removeConstraint:_tabbarConstraintR];
            [self.view  removeConstraint:_tabbarConstraintB];
            [self.view  removeConstraint:_tabbarConstraintL];


            // right space
            _tabbarConstraintR =  [NSLayoutConstraint constraintWithItem:_tabBar
                                                              attribute:NSLayoutAttributeTrailing
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeTrailing
                                                             multiplier:1.0
                                                               constant:0.0];

            // bottom space
            _tabbarConstraintB =  [NSLayoutConstraint constraintWithItem:_tabBar
                                                              attribute:NSLayoutAttributeBottom
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeBottom
                                                             multiplier:1.0
                                                               constant:0.0];

            // left space
            _tabbarConstraintL =  [NSLayoutConstraint constraintWithItem:_tabBar
                                                              attribute:NSLayoutAttributeLeading
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeLeading
                                                             multiplier:1.0
                                                               constant:0.0];



            //[self.view addConstraint:_tabbarConstraintT];
            [self.view addConstraint:_tabbarConstraintR];
            [self.view addConstraint:_tabbarConstraintB];
            [self.view addConstraint:_tabbarConstraintL];



        }

            break;
        case UIInterfaceOrientationLandscapeLeft:
        case UIInterfaceOrientationLandscapeRight:
        {
            //load the landscape view
           _tabBar.transform = CGAffineTransformRotate(CGAffineTransformIdentity, M_PI/2);


            [self.view  removeConstraint:_tabbarConstraintT];
            [self.view  removeConstraint:_tabbarConstraintR];
            [self.view  removeConstraint:_tabbarConstraintB];
            [self.view  removeConstraint:_tabbarConstraintL];
            NSLog(@"frame: %f,%f",_tabBar.frame.size.height,_tabBar.frame.size.width);


            // top space 
            _tabbarConstraintT =   [NSLayoutConstraint constraintWithItem:_tabBar
                                                                attribute:NSLayoutAttributeTop
                                                                relatedBy:NSLayoutRelationEqual
                                                                   toItem:self.view
                                                                attribute:NSLayoutAttributeTop
                                                               multiplier:1.0
                                                                 constant:[UIScreen mainScreen].bounds.size.height/2+49];
            // left space
            _tabbarConstraintL =  [NSLayoutConstraint constraintWithItem:_tabBar
                                                               attribute:NSLayoutAttributeLeading
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:self.view
                                                               attribute:NSLayoutAttributeLeading
                                                              multiplier:1.0
                                                                constant:-360.0];

            // effective width
            _tabbarConstraintR = [NSLayoutConstraint constraintWithItem:_tabBar
                                                              attribute:NSLayoutAttributeHeight
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem: nil
                                                              attribute:NSLayoutAttributeHeight
                                                             multiplier:1.0f
                                                               constant:49];
            // effective height
            _tabbarConstraintB = [NSLayoutConstraint constraintWithItem:_tabBar
                                                              attribute:NSLayoutAttributeWidth
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem: nil
                                                              attribute:NSLayoutAttributeWidth
                                                             multiplier:1.0f
                                                               constant:[UIScreen mainScreen].bounds.size.height];


            [self.view addConstraint:_tabbarConstraintR];
            [self.view addConstraint:_tabbarConstraintB];
            [self.view addConstraint:_tabbarConstraintT];
            [self.view addConstraint:_tabbarConstraintL];


        }
            break;
        case UIInterfaceOrientationUnknown:break;
    }
}

enter image description here enter image description here

0 个答案:

没有答案