【问题标题】:How can I make a vertical slider in swift?如何快速制作垂直滑块?
【发布时间】:2015-06-26 05:37:32
【问题描述】:

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

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

我想知道是否有人知道快速旋转滑块的方法?

谢谢

【问题讨论】:

    标签: swift rotation slider


    【解决方案1】:

    假设您正在谈论 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))
            }
        }
    }
    

    【讨论】:

    • Swift 3 你应该使用 CGAffineTransform.init(rotationAngle: CGFloat(-M_PI_2))
    • Swift 3 语法更简洁:CGAffineTransform(rotationAngle: -CGFloat.pi)
    • 其实是CGAffineTransform(rotationAngle: -CGFloat.pi/2)
    • 更短:CGAffineTransform(rotationAngle: -.pi/2)
    【解决方案2】:

    选项 1:

    在 Swift 4 中:

    -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 Note:keypath 前后没有空格

    【讨论】:

      【解决方案3】:

      使用 OOP。如果将这种旋转定义为 UIView 上的 Extension,那么不仅 UIView,而且所有继承自 UIView 的子类都可以旋转。这当然包括UISlider,还有UILabel、UIButton等200左右?其他子类...见这里 list of subclasses for UIView

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

      知道继承就好了,省了很多工作。对于许多要制作的 Swift 扩展,尝试在类层次结构中向上移动它可能是一个好主意,就像在这个例子中一样。

      【讨论】:

        【解决方案4】:

        带有约束的 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)
        }
        

        【讨论】:

        • 您的回答需要添加另一个第三方工具
        • 只需在情节提要中创建一个 UISlider 并为其创建一个名为 ControlSlider 的 outlet。不需要第 3 方物品。然后调用这个函数
        猜你喜欢
        • 1970-01-01
        • 2021-10-08
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-15
        相关资源
        最近更新 更多