iOS中的垂直UISlider具有自动布局功能

时间:2013-12-24 09:33:05

标签: ios7 rotation uislider cgaffinetransform

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

self.slider.transform = CGAffineTransformMakeRotation(M_PI_2);

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


enter image description here

10 个答案:

答案 0 :(得分:11)

我有一个垂直滑块使用iOS 8和Xcode 6,故事板中只有3个约束和一行代码。这是界面的裁剪屏幕截图:

enter image description here

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

  1. vSlider.Center Y =图像View.Center Y
  2. vSlider.Width = Image View.Height
  3. vSlider.Center X =图像View.Trailing + 16
  4. 当然,一行代码是:

    self.vSlider.transform = CGAffineTransformMakeRotation(-M_PI_2);
    

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

答案 1 :(得分:10)

我让它以这种方式工作:

viewDidLoad:我添加了

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

以便在使用

旋转滑块之前调用它
self.slider.transform=CGAffineTransformRotate(self.slider.transform,270.0/180*M_PI);

并且无需删除并重新添加到superview。

答案 2 :(得分:4)

这是一个古老的话题,但这里是一个Swift解决方案,在故事板中有自动布局限制,没有别的。

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

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

2 /在故事板中定义约束,记住滑块将围绕其中心旋转。

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

  1. myView.Leading = mySlider.CenterX - 20
  2. mySlider.width = myView.Height(例如乘数为0.8)
  3. mySlider.CenterY = myView.CenterY
  4. mySlider当然会在故事板中显示为水平,但是会有正确的大小调整,并且中心将被正确定位。

答案 3 :(得分:2)

取消选中ViewController上的自动布局,SDK 7.0下没有其他选项可以使其垂直工作:(

答案 4 :(得分:1)

关于将UISlider垂直放置,有很多可能的解决方案。以下是我在XCode5中启用autoLayout的iOS7摘要(默认情况下在故事板中):

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

  2. 在故事板中定义关于滑块显式的autoLayout约束,无论您喜欢什么

答案 5 :(得分:0)

在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属性手动调整大小。

答案 6 :(得分:0)

您不能使用故事板来构建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];

答案 7 :(得分:0)

试试这个: -

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

答案 8 :(得分:0)

尝试使用以下代码在垂直位置旋转UISlider ..

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

答案 9 :(得分:0)

对我而言,两步流程效果最好(包含一些以前的解决方案)

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

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