我正在定制UISwitch。我已经使用它更改了大小:self.transform = CGAffineTransform(scaleX:1.25,y:1.16)。现在我有一个问题,拇指仍然是默认大小。
如何与uiswitch配合使用?
class CustomSwitch:UISwitch {
override init(frame: CGRect) {
super.init(frame: frame)
self.viewDidLoad()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
self.viewDidLoad()
}
func viewDidLoad() {
self.transform = CGAffineTransform(scaleX: 1.25, y: 1.16)
self.setupAppearance()
self.setColors()
self.addTarget(self, action: #selector(toggleState), for: .valueChanged)
}
func setupAppearance() {
self.layer.borderColor = UIColor.HavelockBlue.cgColor
self.layer.borderWidth = 1.0
self.layer.cornerRadius = self.bounds.height / 2
}
func setColors() {
self.backgroundColor = .white
self.subviews.first?.subviews.first?.backgroundColor = .clear
self.onTintColor = .white
self.thumbTintColor = .HavelockBlue
}
@objc func toggleState() {
if self.isOn {
print("Dark mode is on")
} else {
print("Dark mode is off")
}
}
}
您的问题是,您的设置受到限制, width
并且height
您的custom受到限制UISwitch
,之后您尝试使用transform
该对象,但是实际发生了什么。
这里面override init(frame: CGRect)
并且required init?(coder: NSCoder)
如果使用方法自动布局你没有你的实际最终尺寸UIView
,大小取自IB
。但是你正在设置self.layer.cornerRadius = self.bounds.height / 2
。如果您将打印的值,frame.size and bounds.size
您将看到。
简单的解决方案是从去除约束的大小IB
,只是transform
你的愿望规模。
例:
required init?(coder: NSCoder) {
super.init(coder: coder)
changeSwitchSize()
}
override init(frame: CGRect) {
super.init(frame: frame)
changeSwitchSize()
}
private func changeSwitchSize() {
print("Before transform switch frame size: \(frame.size), bounds size: \(bounds.size)")
self.transform = CGAffineTransform(scaleX: 1.25, y: 1.16)
print("After transform switch frame size: \(frame.size), bounds size: \(bounds.size)")
}
/// Before transform switch frame: (51.0, 31.0), (51.0, 31.0)
/// After transform switch frame: (63.75, 35.95999999999998), (51.0, 31.0)
但是要注意,
CGAffineTransform
相对于其上层视图而言,更改视图框架
有关它的更多信息:https : //stackoverflow.com/a/11288488/6057764
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句