如何在 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)
}
我想知道如何在 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)
}