根据滑块更改 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"
}
}
}
我使用 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"
}
}
}