如何快速制作垂直滑块?
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 方物品。然后调用这个函数以上是关于如何快速制作垂直滑块?的主要内容,如果未能解决你的问题,请参考以下文章