如何快速制作垂直滑块?

Posted

技术标签:

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

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

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

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

谢谢

【问题讨论】:

【参考方案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 方物品。然后调用这个函数

以上是关于如何快速制作垂直滑块?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作垂直 UISlider? [复制]

如何制作水平滑块?

如何制作滑块动画

如何制作这样的滑块

如何使用 json 数据制作卡片滑块

到达一端时如何在点击滑块上制作无限过渡效果? (过渡问题)