2017-08-01 1 views
0

Ich möchte ein blaues und schwarzes Rechteck alternativ beim Start der App anzeigen. Ich habe diesen Code geschrieben. Es kompiliert gut ohne Fehler, aber es gibt kein Ergebnis.Wie führe ich eine Schleife in ViewDidAppear in Swift?

import UIKit 

class ViewController: UIViewController { 

    var mybool = true 

    override func viewDidAppear(_ animated: Bool) { 


     while(mybool){ 
      let firstFrame = CGRect(x: 160, y: 240, width: 100, height: 150) 
      let firstView = UIView(frame: firstFrame) 
      firstView.backgroundColor = UIColor.blue 
      view.addSubview(firstView) 

      let secondView = UIView(frame: firstFrame) 
      secondView.backgroundColor = UIColor.black 
      view.addSubview(secondView) 

     } 
    } 


} 

Kann mir jemand sagen, wo ich falsch liege?

Vielen Dank im Voraus

+1

Was Ihre while-Schleife nicht mehr reagiert? Sie scheinen unendlich viele Ansichten am selben Ort hinzuzufügen, ohne dass die Anzeige aktualisiert werden muss. –

Antwort

2

Sie ein while Warten auf eine Eigenschaft nicht ausgeführt, je auf dem Haupt-Thread zu ändern! Es ist der Thread, auf den deine gesamte Benutzeroberfläche angewiesen ist. Die App sieht aus, als wäre sie abgestürzt und iOS wird sie früher oder später beenden.

Verwenden Core Animation:

weak var loadingView: UIView! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    let frame = CGRect(x: 160, y: 240, width: 100, height: 150) 
    let subview = UIView(frame: frame) 
    subview.backgroundColor = .black 
    self.view.addSubview(subview) 

    UIView.animate(withDuration: 1, delay: 0, options: [.autoreverse, .repeat, .curveEaseInOut], animations: { 
     subview.backgroundColor = .blue 
    }, completion: nil) 

    self.loadingView = subview 
} 

Wenn Sie die Animation stoppen wollen (zum Beispiel, wenn fertig geladen ist):

func stopAnimation() { 
    loadingView.layer.removeAllAnimations() 
} 
Verwandte Themen