【发布时间】:2015-06-26 05:37:32
【问题描述】:
我想知道如何在 swift 中创建一个垂直滑块。
我曾尝试使用.transform,然后添加旋转,但这会返回异常并旋转整个屏幕。我只需要一个垂直滑块。
我想知道是否有人知道快速旋转滑块的方法?
谢谢
【问题讨论】:
我想知道如何在 swift 中创建一个垂直滑块。
我曾尝试使用.transform,然后添加旋转,但这会返回异常并旋转整个屏幕。我只需要一个垂直滑块。
我想知道是否有人知道快速旋转滑块的方法?
谢谢
【问题讨论】:
假设您正在谈论 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))
}
}
}
【讨论】:
CGAffineTransform(rotationAngle: -CGFloat.pi)
CGAffineTransform(rotationAngle: -.pi/2)
使用 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 扩展,尝试在类层次结构中向上移动它可能是一个好主意,就像在这个例子中一样。
【讨论】:
带有约束的 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)
}
【讨论】: