Ich habe eine iOS 10 App, die eine Schaltfläche ("Press Me!") Enthält, und eine UIView, die ein blau umrandetes Rechteck ohne Füllung enthält. Ich möchte das Rechteck allmählich (in etwa 5 Sekunden) mit Rot füllen, indem ich eine beliebige Methode benutze (ich habe es mit UIView.animation(withDuration:, animations:)
versucht). Ich werde den Code unten enthalten:Füllen Sie allmählich eine Form mit swift und UIViewAnimation?
Hier ist der Viewcontroller:
class ViewController: UIViewController {
@IBOutlet weak var tronkyy: tronc!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func didPress(_ sender: UIButton) {
tronkyy.full = true
tronkyy.setNeedsDisplay()
} }
und die Aussicht:
@IBDesignable class tronc: UIView {
//var value = 0.0
var full = false
override func draw(_ rect: CGRect) {
UIColor.blue.setStroke()
boxPath().stroke()
drawDynamic()
}
private func boxPath() -> UIBezierPath {
let path = UIBezierPath(rect: CGRect(x: 0.1 * frame.width, y: 0.1 * frame.height, width: 0.8 * frame.width, height: 0.8 * frame.height))
UIColor.blue.setStroke()
return path
}
func drawDynamic() {
if full {
UIView.animate(withDuration: 10) { _ in
//while self.value < 1 {
let path = UIBezierPath(rect: CGRect(x: 0.1 * self.frame.width, y: 0.1 * self.frame.height, width: (0.8 * self.frame.width), height: 0.8 * self.frame.height)) //* CGFloat(value)))
UIColor.red.setFill()
path.fill()
//self.value += 0.1
//}
}
full = false
}
} }
Ah, und ja, ignorieren Sie bitte, dass die rote Ansicht das Rechteck abzudecken. Das Problem ist, dass es keine allmähliche Füllung gibt. es füllt es nur ein für allemal.
Edit: Ich habe die "Wert" -Eigenschaft und die While-Schleife auskommentiert, wie in den Antworten vorgeschlagen, aber es funktioniert immer noch nicht.
Können Sie eine UIView mit einer Unteransicht verwenden? Oder planen Sie eine komplexere Form? – DonMag
Ich plane eigentlich komplexe Dinge zu verwenden. Aber ich werde mich freuen, deinen Weg zu sehen –