我使用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)
}
}
有什么建议吗?
答案 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"
}
}
}