2017-08-01 18 views
0

我想要在应用程序启动时显示蓝色和黑色矩形。我写了这段代码。它的编译没有任何错误,但没有结果。如何在Swift中的ViewDidAppear中运行循环?

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) 

     } 
    } 


} 

谁能告诉我我哪里出错了吗?

在此先感谢

+1

什么停止while循环?您似乎正在同一位置添加无数个视图,而不会让显示更新。 –

回答

2

不要运行while等待一个属性来更改主线程,永远!这是整个UI依赖的线程。该应用看起来会崩溃,iOS迟早会杀死它。

使用核心动画:

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 
} 

当你想停止动画(例如,当装载完成):

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