根据滑块更改 UIView 中的内容

Changing content in UIView based on slider

我使用 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)

 }
}

有什么建议吗?

所以我在 AppCode 的某个人的帮助下设法做到了。

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

 func setNeedsDisplay() 

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

希望我的解释对以后需要这个的人来说是清楚的。

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"
        }
    }
}