2016-01-05 46 views
0

我有一個在iOS 9項目中使用Swift 2的問題。將UISlider對齊到最近的數組值

我爲UISlider創建了一個數組,它正在工作。但是,滑塊不會「捕捉」到數組值,它可以位於它們之間並且是數組值之間的數字。由於我正在做一些關於價值觀的計算,所以這會搞亂我的數學。有什麼辦法可以將紗條值捕捉到最接近的數組值?

以下是我的代碼。

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

只需使用滑塊數組索引滑動(0,1,2,3,4,5,6 ..),只是該索引處顯示元件 –

+0

感謝您的反饋。我會怎麼做呢? –

+0

滑塊從0到array.count-1步驟1 –

回答

0

第一件事第一,從蘋果Document

UISlider目的是用來選擇來自一個連續範圍的值的單個值的視覺控制。

並實現類似的視覺安排,而不是使用UIPickerView(如果你願意,你仍然可以使用),根據另一個蘋果Doc

你應該什麼時候使用,而不是一個滑塊步進想要給用戶非常精確的控制元素的值。有關更多信息,請參閱Steppers

如果考慮UIStepper,您可以使用您的數組的索引步進值,並在fpsArrayangleArray到您的標籤顯示相應的值。

或者

要使用UISlider,你仍然需要做一些可怕數學,以確定哪個值是接近。因爲你的數組是而不是算術序列,所以很難設計出反映不同數字差異的好方法。

通過連續跟蹤UISlider的值,可以在找到最接近的可用值之後,同時設置滑塊和文本的值。

+0

感謝您的回答。我結束了與步進 –

0

試試這個

let currentValue = fpsArray[Int(floor(sender.value+0.5))] 
0

感謝所有幫助。我最終將文本標籤變成了一個int,它從數組中調用並使用步進器在數組中移動。

let a:Int? = Int(fpsLabel.text!) 
    let b:Int? = Int(angleLabel.text!) 
    let shutterspeed = (a! * 360)/b! 
    speedLabel.text = "1/\(shutterspeed)"