根据滑块更改UIView中的内容

时间:2015-03-27 10:48:27

标签: ios swift paint-code

我使用AppCode创建了一个Gauge。根据输入,中间的仪表箭头旋转。我想在Swift中使用滑块来确定仪表中的箭头应该旋转多少。如果我对输入进行硬编码,箭头会旋转到正确的位置。例如,如果我输入0.5,则箭头指向仪表的中心。

我的问题是我的UIView永远不会根据新的滑块位置更新箭头。箭头的位置总是取决于UISlider' Current'值。如何让我的UIView实时更新我的​​UISlider。

我有一种感觉,我应该把我的' drawRect'功能在" ratingSliderChanged'动作功能。当我尝试这样做时,我的测量仪永远不会出现。

import Foundation
import UIKit

class RatingViewController: UIView {

  var sliderValue: CGFloat = 0.0

  @IBOutlet var newView:UIView!

  @IBAction func ratingSliderChanged(sender: UISlider){
   sliderValue = CGFloat(sender.value)
   println(sliderValue)
  }

 override func drawRect(rect: CGRect) {

  RatingGaugeStyleKit.drawCanvas1(frame: self.bounds, arrowAngle: sliderValue)

 }
}

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

所以我设法在AppCode的帮助下完成了这项工作。

基本上因为图像是动态的,我需要调用

 func setNeedsDisplay() 

当UISlider发生变化时。这样,它确保在我的绘图中的参数更改时更新我的​​UIView。在这种情况下,我的参数是UISlider的值。

希望我的解释对于将来需要这个的人来说很清楚。

答案 1 :(得分:0)

Swift 4.2

@IBOutlet weak var sliderObj: UISlider!
@IBOutlet weak var selectionUIView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)
    sliderFunc()
}

@IBAction func sliderButtonTapped(_ sender: UISlider) {
    sliderFunc()
}

func sliderFunc() {
    let intObj: Int = Int(sliderObj!.value)
    sliderObj.value = roundf(sliderObj.value)
    let trackRect = sliderObj.trackRect(forBounds: sliderObj.frame)
    let thumbRect = sliderObj.thumbRect(forBounds: sliderObj.bounds, trackRect: trackRect, value: sliderObj.value)
    if intObj == 1 {
        UIView.animate(withDuration: 0.3, animations: {
            self.selectionUIView.center = CGPoint(x: thumbRect.midX, y: self.selectionUIView.center.y)
        }) { (isCompleted) in
            self.textView.text = "Sachin Tendulkar is scored 50 runs below"
        }
    } else if intObj == 2 {
        UIView.animate(withDuration: 0.3, animations: {
            self.selectionUIView.center = CGPoint(x: thumbRect.midX, y: self.selectionUIView.center.y)
        }) { (isCompleted) in
            self.textView.text = "Sachin Tendulkar is scored 100 runs"
        }
    }
}