如何制作自定义 UISlider iOS?
How to make a custom UISlider iOS?
您好,我有一个在 android 中实现的所需样式的 UISlider 版本。
这不是一项简单的任务。现在我想要 iOS 中的相同滑块。我想知道是否有不从头开始绘制所有滑块的解决方案?或者任何建议。谢谢。
您需要做 位 的工作,但您不需要从头开始构建完整的解决方案。
添加标签很简单 - UISlider
的基本用法
"Stretching" 动画显示的轨道图像(或色调颜色)在中心左右会有点棘手,因为 UISlider
控件只有一个轨道/背景图像和一个"current" 在左侧拉伸的图像。
一种方法是将 UISlider
轨道图像设置为透明或隐藏,然后 "overlay" 滑块位于 "full line" 和 "blue line" 上方。当滑块值改变时(因为它被拖动),改变蓝线的框架。
使用自动布局和约束将使这变得非常简单。
编辑: 一个非常简单的例子。 "thumb" 故意移到 "custom slider bar" 下方以显示图像...
并且,这是获取该代码的代码:
import UIKit
class SliderViewController: UIViewController {
// @IBOutlets needed, but I'm just showing the "code" here
// ...
@IBAction func sliderValueChanged(_ sender: Any) {
if let s = sender as? UISlider {
updateSlider(pct: CGFloat(s.value))
}
}
func updateSlider(pct: CGFloat) -> Void {
let p = (pct - 0.5) * 2.0
theValueLabel.text = String(format: "%0.1f", p * 10)
leftSideValueWidth.constant = p >= 0.0 ? 0.0 : (leftSideHolderView.frame.size.width * (-p))
rightSideValueWidth.constant = p >= 0.0 ? (rightSideHolderView.frame.size.width * p) : 0.0
}
override func viewDidLoad() {
super.viewDidLoad()
// init slider to center
updateSlider(pct: 0.5)
// set default left- and right-side "track" images to empty images
theSlider.setMinimumTrackImage(UIImage(), for: .normal)
theSlider.setMaximumTrackImage(UIImage(), for: .normal)
}
}
黑色UIView
用于框架...灰色UIView
用于"slider bar"...两个透明UIView
用于左侧/右侧框架。 .. 两个蓝色 UIView
- 每边一个。以及一个标准的 UISlider
控件。就这些了。
您还可以设置自定义 Thumb 图像,如果默认图像对您的需要来说太大的话。
您好,我有一个在 android 中实现的所需样式的 UISlider 版本。
这不是一项简单的任务。现在我想要 iOS 中的相同滑块。我想知道是否有不从头开始绘制所有滑块的解决方案?或者任何建议。谢谢。
您需要做 位 的工作,但您不需要从头开始构建完整的解决方案。
添加标签很简单 - UISlider
"Stretching" 动画显示的轨道图像(或色调颜色)在中心左右会有点棘手,因为 UISlider
控件只有一个轨道/背景图像和一个"current" 在左侧拉伸的图像。
一种方法是将 UISlider
轨道图像设置为透明或隐藏,然后 "overlay" 滑块位于 "full line" 和 "blue line" 上方。当滑块值改变时(因为它被拖动),改变蓝线的框架。
使用自动布局和约束将使这变得非常简单。
编辑: 一个非常简单的例子。 "thumb" 故意移到 "custom slider bar" 下方以显示图像...
并且,这是获取该代码的代码:
import UIKit
class SliderViewController: UIViewController {
// @IBOutlets needed, but I'm just showing the "code" here
// ...
@IBAction func sliderValueChanged(_ sender: Any) {
if let s = sender as? UISlider {
updateSlider(pct: CGFloat(s.value))
}
}
func updateSlider(pct: CGFloat) -> Void {
let p = (pct - 0.5) * 2.0
theValueLabel.text = String(format: "%0.1f", p * 10)
leftSideValueWidth.constant = p >= 0.0 ? 0.0 : (leftSideHolderView.frame.size.width * (-p))
rightSideValueWidth.constant = p >= 0.0 ? (rightSideHolderView.frame.size.width * p) : 0.0
}
override func viewDidLoad() {
super.viewDidLoad()
// init slider to center
updateSlider(pct: 0.5)
// set default left- and right-side "track" images to empty images
theSlider.setMinimumTrackImage(UIImage(), for: .normal)
theSlider.setMaximumTrackImage(UIImage(), for: .normal)
}
}
黑色UIView
用于框架...灰色UIView
用于"slider bar"...两个透明UIView
用于左侧/右侧框架。 .. 两个蓝色 UIView
- 每边一个。以及一个标准的 UISlider
控件。就这些了。
您还可以设置自定义 Thumb 图像,如果默认图像对您的需要来说太大的话。