如何在 swift 中制作垂直滑块?

How can I make a vertical slider in swift?

我想知道如何在 swift 中创建垂直滑块。

我曾尝试使用 .transform 然后添加旋转,但这会返回异常并旋转整个屏幕。我只需要一个垂直滑块。

我想知道是否有人知道在 swift 中旋转滑块的方法?

谢谢

假设你在谈论 UISlider :

您的方向是正确的,但可能将 AffineTransformation 应用于错误的项目...您应该使用 UISlider.transform 改变它的方向。 这是工作代码(我确实使用 InterfaceBuilder 添加了 UISlider):

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var verticalSlider: UISlider!{
        didSet{
            verticalSlider.transform = CGAffineTransform(rotationAngle: CGFloat(-M_PI_2))
        }
    }
}

选项 1:

在Swift4:

-M_PI_2 已弃用,因此请使用 Double.pi / 2

verticalSlider.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi / 2))

选项 2: 所有 Objective C 和 Swift

Key path = layer.transform.rotation.z 
Type     =  String
Value    = -1.570795

Most Imp 注意:keypath 之前和之后 No Space

使用 OOP。如果你把这个旋转定义为UIView上的一个Extension,那么不仅是UIView,所有继承自UIView的subclass都可以旋转。这当然包括 UISlider,还有 UILabel、UIButton 和大约 200 个?其他 subclasses... 看这里 list of subclasses for UIView

 extension UIView
 {
    func makeVertical()
    {
         transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2)
    }
 }

  // usage example:
  sldBoilerTemperature.makeVertical()  

知道继承就好了,省了很多功夫。对于许多要进行的 Swift 扩展,尝试将其在 class 层次结构中向上移动可能是个好主意,如本例所示。

Swift-5 带约束的垂直滑块

func transformSlider(){
    var constraints = [NSLayoutConstraint]()
    ControlSlider.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi/2))
    ControlSlider.translatesAutoresizingMaskIntoConstraints = false
    constraints.append(ControlSlider.widthAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.8))
    constraints.append(ControlSlider.centerYAnchor.constraint(equalTo: self.centerYAnchor))
    let sliderWidth = (ControlSlider.frame.height * 0.8)/2
    print(sliderWidth)
    constraints.append(ControlSlider.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: (20-sliderWidth)))
    NSLayoutConstraint.activate(constraints)
}