Я создаю 3 полукруглых датчика, каждый из которых содержит UITextField.
Я создал отдельные быстрые файлы (со своими собственными классами UIView) для каждого датчика, где я программно проектирую вид дуг, создающихвверх по датчику (отрезки и т. д.).Одна из этих дуг действует как указатель, показывающий от пустого до полного (startAngle
, что составляет от 149 ° до endAngle
, что составляет 31 °).Я использую @IBOutlet
для доступа к значениям поля (объявляя его main1Field
), но я должен использовать CGFloat, и я не могу понять, как объявить константу, где значения могут использоваться в функции.
Q1: Как можно преобразовать все, что находится в UITextField
, в значения, которые можно вычислить в моей функции?
Q2: я не хочу напрямую вводить входные данные main1Field
нарисовать дугу.Я надеялся использовать @IBAction
, как вы можете видеть, чтобы дуга рисовалась вживую, когда пользователь вводит число в поле.Однако то, как я это делаю, не работает.
@IBAction func main1arc(_ sender: UITextField) { //THIS DOESN'T WORK
func draw(_ rect: CGRect) {
let center = CGPoint(x: bounds.width / 2, y: bounds.height / 2)
let radius: CGFloat = max(bounds.width, bounds.height)
//Arc
let fullTank = 3920
let main1Fuel = CGFloat(self.main1Field) //THIS IS WHERE I NEED HELP
let startAngle = (149 * CGFloat.pi) / 180
let endAngle = (31 * CGFloat.pi) / 180
let angleDifference: CGFloat = 2 * .pi - startAngle + endAngle
let arcLength = angleDifference / CGFloat(fullTank)
let arcEnd = arcLength * CGFloat(main1Fuel) + startAngle
let arc = UIBezierPath(arcCenter: center,
radius: radius / 2 - Constants.arcWidth / 2,
startAngle: startAngle,
endAngle: arcEnd,
clockwise: true)