【问题标题】:Vertical UISlider in iOS with autolayoutiOS中带有自动布局的垂直UISlider
【发布时间】:2013-12-24 09:33:04
【问题描述】:

根据我的 iPad 应用要求,我必须垂直显示 UISlider。
我正在使用 iOS7 编译器,部署目标是 iOS6。
在故事板中,我添加了宽度为 600 像素的水平 UISlider。我在视图控制器中创建了 IBOutlet。我没有设置任何自动布局约束。我正在使用下面的代码来旋转并使其垂直。

self.slider.transform = CGAffineTransformMakeRotation(M_PI_2);

在旋转之后和之前,我正在打印正确的滑块框架大小。但是滑块看起来不合适。它只是在中心显示旋钮。如何旋转 UISlider?


【问题讨论】:

标签: ios7 rotation uislider cgaffinetransform


【解决方案1】:

我在 iOS 8 和 Xcode 6 上获得了一个垂直滑块,情节提要中只有 3 个约束和一行代码。这是界面的截屏:

垂直滑块和旁边的 UIImageView 之间有 3 个约束:

  1. vSlider.Center Y = Image View.Center Y
  2. vSlider.Width = Image View.Height
  3. vSlider.Center X = Image View.Trailing + 16

当然还有一行代码:

self.vSlider.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))

在 Xcode 6 的故事板中设置这些约束很容易,但我认为在代码中编写这些约束以支持 iOS 7 或 6 应该很简单。

【讨论】:

    【解决方案2】:

    我让它这样工作:

    viewDidLoad:我添加了

    [self.slider removeConstraints:self.slider.constraints];
    [self.slider setTranslatesAutoresizingMaskIntoConstraints:YES];
    

    以便在旋转滑块之前调用它

    self.slider.transform=CGAffineTransformRotate(self.slider.transform,270.0/180*M_PI);
    

    并且没有必要将其删除并重新添加到superview。

    【讨论】:

      【解决方案3】:

      这是一个老话题,但这里有一个 Swift 解决方案,在情节提要中具有自动布局约束,仅此而已。

      1/ 您需要为 IBOutlet 添加旋转:

      @IBOutlet weak var mySlider: UISlider! {
          didSet {
              mySlider.transform = CGAffineTransform(rotationAngle: -CGFloat.pi/2)
          } // didSet
      } // IBOutlet
      

      2/ 在情节提要中定义约束,记住 Slider 将围绕其中心旋转。

      例如,如果要在 myView 的左侧定位 mySlider,则需要三个约束。

      1. myView.Leading = mySlider.CenterX - 20
      2. mySlider.width = myView.Height(例如,乘数为 0.8)
      3. mySlider.CenterY = myView.CenterY

      mySlider 当然会在情节提要中水平显示,但大小正确,中心位置也正确。

      【讨论】:

      • 对于右侧的滑块,您将使用trailing 而不是leading 作为第一项,如下所示:myView.Trailing = mySlider.CenterX + 20
      【解决方案4】:

      取消选中 ViewController 上的 Auto-Layout,SDK 7.0 下没有其他选项可以使其垂直工作:(

      【讨论】:

        【解决方案5】:

        关于垂直放置 UISlider 有很多可能的解决方案。这是我在 XCode5 中启用自动布局的 iOS7 的总结(默认在情节提要中):

        1. viewDidLoad添加方法 self.slider.transform = CGAffineTransformMakeRotation(M_PI_2);

        2. 在情节提要中显式根据您的喜好定义关于滑块的 autoLayout 约束

        【讨论】:

          【解决方案6】:

          在您的 viewDidLoad 中,尝试:

          UIView *superView = self.sizeSlider.superview;
          [self.sizeSlider removeFromSuperview];
          [self.sizeSlider removeConstraints:self.view.constraints];
          self.sizeSlider.translatesAutoresizingMaskIntoConstraints = YES;
          self.sizeSlider.transform = CGAffineTransformMakeRotation(M_PI_2);
          [superView addSubview:self.sizeSlider];
          

          它不适用于约束,因此诀窍是删除 uislider 的约束。 您可能需要通过设置它的 frame 属性来手动调整它的大小。

          【讨论】:

            【解决方案7】:

            您不能使用情节提要来构建 UISlider。 通过编码构建 UISlider。

            slider = [[UISlider alloc] initWithFrame:CGRectMake(640, 150, 600, 400)];
            [slider.layer setAnchorPoint:CGPointMake(0.0f, 0.0f)];
            slider.transform = CGAffineTransformMakeRotation(M_PI/2);
            [self.view addSubview:slider];
            

            【讨论】:

              【解决方案8】:

              试试这个:-

              self.slider.transform=CGAffineTransformRotate(slideToUnlock.transform,-90.0/180*M_PI);

              【讨论】:

                【解决方案9】:

                尝试下面的代码以垂直位置旋转 UISlider..

                //To rotate the slider in Vertical Position
                CGAffineTransform sliderRotation = CGAffineTransformIdentity;
                sliderRotation = CGAffineTransformRotate(sliderRotation, -(M_PI / 2));
                sliderBrightness.transform=sliderRotation;
                

                【讨论】:

                  【解决方案10】:

                  对我来说,两步过程效果最好(结合以前的一些解决方案)

                  自动布局步骤) 我在 IB 中添加了一个垂直视图并使用自动布局将其链接到相邻视图。然后我在视图中添加了一个滑块并将它简单地连接到视图的中心。然后将滑块的宽度连接到视图的高度。最后控制拖动滑块出口到我的 ViewController 代码(作为滑块)

                  代码步骤) 然后简单地将其添加到我的 viewWillAppear(swift-code)中:
                  let trans = CGAffineTransformMakeRotation(CGFloat(M_PI_2)); slider.transform = trans;

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2012-09-28
                    • 2021-10-12
                    • 2011-09-17
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-02-14
                    • 1970-01-01
                    • 2014-07-03
                    相关资源
                    最近更新 更多