将 UISlider 捕捉到最近的数组值
Posted
技术标签:
【中文标题】将 UISlider 捕捉到最近的数组值【英文标题】:Snapping UISlider to nearest array value 【发布时间】:2016-01-05 11:15:28 【问题描述】:我有一个在 ios 9 项目中使用 Swift 2 的问题。
我为 UISlider 创建了一个数组,它正在工作。但是,滑块不会“捕捉”到数组值,它可以位于它们之间并且是数组值之间的数字。当我对这些值进行一些计算时,它弄乱了我的数学。有什么方法可以让 sliver 值捕捉到最近的数组值?
下面是我的代码。
let fpsArray = ["23.98", "24", "25","29.97","30","50","59.94","60"]
let angleArray = ["11.25","15","22.5","30","37.5","45","60","72","75","90","108","120","144","150","172.8","180","216","270","324","360"]
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
@IBAction func fpsLabelChange(sender: UISlider)
let currentValue = fpsArray[Int(sender.value)]
fpsLabel.text = "\(currentValue)"
@IBAction func angleLabelChange(sender: UISlider)
let anglecurrentValue = angleArray[Int(sender.value)]
angleLabel.text = "\(anglecurrentValue)"
@IBAction func changeSpeedLabel(sender: AnyObject)
//maths
let framespersecond = fpsSlider.value
let shutterangle = angleSlider.value
let shutterspeed = (framespersecond * 360) / (shutterangle)
speedLabel.text = "1/\(shutterspeed)"
【问题讨论】:
只需使用滑块滑动数组索引(0,1,2,3,4,5,6..)并仅显示该索引处的元素 感谢您的反馈。我该怎么做呢? 滑块从 0 到 array.count-1 步骤 1 如果它们相互关联,考虑使用二维数组 @LeoDabus 我认为 snap 效果是他想要的关键功能。 【参考方案1】:第一件事,来自 Apple Document
UISlider
对象是一个可视控件,用于从 连续 值范围中选择单个值。
为了实现类似的视觉排列,而不是使用UIPickerView
(如果你愿意,你仍然可以使用),根据另一个Apple Doc
当您想让用户非常精确地控制元素的值时,您应该使用步进器而不是滑块。如需更多信息,请参阅Steppers。
如果您确实考虑UIStepper
,您可以使用步进值作为数组的索引,并在您的标签中显示fpsArray
和angleArray
中的相应值。
或者
要使用UISlider
,您仍然需要进行一些可怕数学来确定它接近哪个值。由于您的数组不是算术序列,因此很难设计出一种好的方法来反映不同的数字差异。
通过不断跟踪UISlider
的值,您可以在找到最接近的可用值后同时设置滑块和文本的值。
【讨论】:
感谢您的回答。我最终选择了步进器【参考方案2】:试试这个
let currentValue = fpsArray[Int(floor(sender.value+0.5))]
【讨论】:
【参考方案3】:感谢所有帮助。我最终将文本标签变成了一个 int,它从数组中调用并使用步进器在数组中移动。
let a:Int? = Int(fpsLabel.text!)
let b:Int? = Int(angleLabel.text!)
let shutterspeed = (a! * 360) / b!
speedLabel.text = "1/\(shutterspeed)"
【讨论】:
以上是关于将 UISlider 捕捉到最近的数组值的主要内容,如果未能解决你的问题,请参考以下文章