如何制作自定义UISlider iOS?

时间:2017-07-10 13:47:22

标签: ios swift uislider

您好我在Android中实现了所需的UISlider风格版本。 enter image description here

实施这不是一项微不足道的任务。现在我想在iOS中使用相同的滑块。我想知道是否有解决方案不从头开始绘制所有滑块?或任何建议。谢谢。

1 个答案:

答案 0 :(得分:1)

您必须完成的工作,但您不需要从头开始构建完整的解决方案。

添加标签非常简单 - UISlider

的基本用法

"拉伸"由于UISlider控件只有一个轨道/背景图像和一个"当前"因此动画显示的中心左右两侧的轨迹图像(或色调)会有点棘手。拉伸在左侧的图像。

一种方法是将UISlider曲目图像设置为透明或隐藏,然后覆盖"覆盖"你的"全线"顶部的滑块和你的"蓝线"。当滑块值发生变化时(拖动时),更改蓝线的边框。

使用自动布局和约束会非常简单。

编辑:一个非常快速的例子。 "拇指"有目的地移动到"自定义滑块"显示图像...

enter image description here

而且,这是获得该代码的代码:

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" ...左/右侧的两个透明UIView框架...两个蓝色UIView - 每边一个。和标准UISlider控件。这是关于它的。

如果默认的Thumb图像太大而无法满足您的需求,您也可以设置自定义Thumb图像。