美文网首页
iOS 可点击的自定义slider

iOS 可点击的自定义slider

作者: 小生不才_HR | 来源:发表于2022-12-04 15:42 被阅读0次

先看效果图

截屏2022-12-05 14.53.09.png
截屏2022-12-05 14.54.57.png
截屏2022-12-05 14.55.57.png

直接上代码

import UIKit

class MMSlider: UISlider {
   private var lab = UILabel()
    private var unit = ""
    private var accuracy = 1
    private var sunmmary = ""
    var changed:((Bool)->())?
    /// 初始化
    /// - Parameters:
    ///   - showLabel: 绑定的显示label
    ///   - sunmmary: 显示文字的描述
    ///   - unit: 显示的单位
    ///   - accuracy: 显示的精度 例如 1(精确到个位), 100 (精确到百位)
    init(_ showLabel:UILabel? = nil ,sunmmary:String = "", unit:String = "" , accuracy:Int = 1) {
        super.init(frame: .zero)
        showLabel != nil ? self.lab = showLabel! : nil
        self.unit = unit
        self.accuracy = accuracy
        self.sunmmary = sunmmary
        self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapClick)))
        self.addTarget(self, action: #selector(sliderChage), for: .valueChanged)
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    /// 点击触发
    @objc private func tapClick(ges:UIGestureRecognizer) {
        let pointX =  ges.location(in: self).x
        var value = (self.maximumValue - self.minimumValue) * Float(pointX/self.bounds.width)
        value = Float(Int(value) / accuracy * accuracy)
        value += self.minimumValue
        self.setValue( value, animated: true)
        self.lab.text = sunmmary + "\(Int(value))" + unit
        self.changed?(true)
    }
    /// 滑动触发
    @objc private func sliderChage(_ slider:UISlider) {
        let value = Int(slider.value) / accuracy * accuracy
        lab.text = sunmmary + "\(Int(value))" + unit
        self.changed?(false)
    }
}

使用方法

和UIslider类似,但是这里是有封装绑定的UIlabel控件的,用来显示当前的数值。

 /// 饱和度 slider
    private lazy var slider :MMSlider = {
        let view = MMSlider(saturabilityLab, sunmmary: "饱和度 ",unit: "%",accuracy: 1)
        view.maximumValue = 100
        view.minimumValue = 0
        view.value = 50
        view.setThumbImage(UIImage(named: "ic_color_slider_white"), for: .normal)
        view.maximumTrackTintColor = .white
        return view
    }()

图片1 上的色温和RG值的效果也是用这个MMSlider实现的,
背景用图片,MMSlider放图片之上,滑块用自定义的图片就可以了
图片2上的渐变效果是用我之前的GradientView实现的,做为背景图。
如果大家有疑问,可以下面评论点赞。

相关文章

网友评论

      本文标题:iOS 可点击的自定义slider

      本文链接:https://www.haomeiwen.com/subject/nasvfdtx.html