如何在 Swift 中自定义 UISlider 值

Posted

技术标签:

【中文标题】如何在 Swift 中自定义 UISlider 值【英文标题】:How to customize UISlider Value in Swift 【发布时间】:2015-05-29 12:59:26 【问题描述】:

我以编程方式创建UISlider。我尝试将 UISlider 值自定义为 4.1、4.2、4.3、4.4、4.5、5.0、5.1、5.2、5.3、5.4、5.5、6.0,...任何人都给我解决方案

sliderDemo = UISlider(frame:CGRectMake(0, 0, 200,20))
    var numberOfSteps : NSInteger = numbers.count - 1
    sliderDemo.minimumValue = 6.5
    sliderDemo.maximumValue = 4.1
    sliderDemo.continuous = true
    sliderDemo.value = 4.0
    sliderDemo.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged)
    self.view.addSubview(sliderDemo)

func sliderValueDidChange(sender:UISlider!)

    println("number:\(sender.value)")

【问题讨论】:

@NimitParekh 为什么他需要自定义控制器? @Bala 你能告诉我们你面临的问题吗? 您希望滑块没有 4.6、4.7、4.8、4.9、5.6、5.7、5.8、5.9 吗? @OmerWaqasKhan 因为我想在滑块中显示人体高度,所以我想自定义 UISlider 值 ...如果滑块尝试 4.11,下一个值必须是 5.0 ...我的最小值是 4.9 和最大值是 6.11 ... 你需要在sliderValueDidChange中为此编写逻辑 【参考方案1】:

我只是为您创建了一个自定义滑块的示例,在这种情况下,我自己创建并将其添加到表单中,但您可以轻松适应使用情节提要中的滑块,您需要做的就是添加您的值对于 numbers 数组,结果将在 valueChanged 函数中的变量 number 中,您可以使用观察者、通知或协议在值发生变化时检索值,或者直接从那里调用函数。

class ViewController: UIViewController 

    var slider:UISlider?
    // These number values represent each slider position
    var numbers = [1, 2, 3, 4, 5, 6, 7] //Add your values here
    var oldIndex = 0

    override func viewDidLoad() 
        super.viewDidLoad()
        slider = UISlider(frame: self.view.bounds)
        self.view.addSubview(slider!)

        // slider values go from 0 to the number of values in your numbers array
        var numberOfSteps = Float(numbers.count - 1)
        slider!.maximumValue = numberOfSteps;
        slider!.minimumValue = 0;

        // As the slider moves it will continously call the -valueChanged:
        slider!.continuous = true; // false makes it call only once you let go
        slider!.addTarget(self, action: "valueChanged:", forControlEvents: .ValueChanged)
    
    func valueChanged(sender: UISlider) 
        // round the slider position to the nearest index of the numbers array
        var index = (Int)(slider!.value + 0.5);
        slider?.setValue(Float(index), animated: false)
        var number = numbers[index]; // <-- This numeric value you want
        if oldIndex != index
            println("sliderIndex:\(index)")
            println("number: \(number)")
            oldIndex = index
        
    

希望对你有帮助!

【讨论】:

感谢您的回复...我使用您的代码,它对我很有帮助...我将 numbers 数组值替换为 'var numbers = [4.9, 4.10, 4.12, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 5.12, 5.11, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 6.12, 6.11]' 部分给出输出......问题是索引取自 5,所以我得到的第一个值是 5.2 ...你能帮帮我吗 对不起,我很困惑,我只是用你发布的数组运行,它没有问题,可能我不太了解你要归档的内容。 如果我了解您的需求,我相信我能够帮助您。也许您正在更改 minimumValue 和 maximumValue,如果您不这样做,只需更改数组并且不读取索引而是读取变量数 帮了我很多,谢谢,Swift3 修复:slider!.addTarget(self, action: #selector(valueChanged), for: .valueChanged) 巴拉,您的第一个值显示为 5,因为您仍在滑块值 IB 属性中将最小值设置为 4.1。将其更改为 0(零),以便它可以从数组中的第一个元素读取,该元素传递 4.1 值

以上是关于如何在 Swift 中自定义 UISlider 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中为 UISlider 的值添加百分号

在 Swift 中:如何使用 uislider 值作为变量来设置旋转速度

如何在 iOS 中自定义 MPVolumeView?

如何在 SwiftUI 中自定义 Slider 蓝线?

给 UISlider 进度条圆角 [Swift]

如何在 Swift iOS 中自定义导航控制器