2016-10-12 42 views
0

我有一個布爾變量,稱爲flag初始值爲false。基於一個成功的過程,它被設置爲true。有一個按鈕alert,點擊它時,它會檢查標誌的值以及UI上的旋轉圖像,如果flag爲true,則應顯示成功消息。否則,應持續進行響應檢查(5次10次)。連續檢查在Swift中的響應

這是我的功能。我一直在使用NStimer來實現這一點。這裏是代碼片段:

var timer = NSTimer() 
var count = 10 
var flag: Bool = false 
@IBOutlet weak var alert: UIButton! 

@IBAction func alertAction(sender: AnyObject) { 
    timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: #selector(ViewController.prints), userInfo: nil, repeats: true) 
} 

func prints(){ 
    if(count > 0) 
    { 
     if flag == false{ 
     **Spinning Image** 
      count -= 1 
     } else { 
     count = 0 
     } 

    } else { 
     timer.invalidate() 
    } 
} 

旋轉圖像停止並在每5秒鐘後繼續(如果響應需要超過5秒鐘)。我希望連續不斷地旋轉圖像。有人可以幫忙嗎?

提前致謝!

+0

你應該叫'FUNC打印()'在你的迴應。 – Vats

回答

1

從我的理解,這段代碼將做你想要的。如果您使用的是UIActivityIndi​​cator。確保在啓動旋轉動畫的位置啓動它,並在使計時器無效時停止它。

斯威夫特3例

@IBOutlet weak var pin: UIImageView! 
var timer: Timer? 
var count: Int = 5 
var flag: Bool { 
    return count == 0 
} 

@IBAction func buttonPressed(_ sender: AnyObject) { 
    let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation") 
    rotationAnimation.fromValue = 0 
    rotationAnimation.toValue = 2 * M_PI 
    rotationAnimation.duration = 0.6 
    rotationAnimation.isCumulative = true 
    rotationAnimation.repeatCount = Float.infinity 
    pin.layer.add(rotationAnimation, forKey: "rotate") 

    timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(prints), userInfo: nil, repeats: true) 
} 

func prints() { 
    if flag { 
     pin.layer.removeAllAnimations() 
     timer?.invalidate() 
    } else { 
     count = count - 1 
    } 
} 
+0

太棒了!謝謝..這工作。 – NKay

2

輪詢是最絕望的異步模式,幾乎總是錯誤的。瞭解一下價值觀察和反應模式。

var flag = false { 
    didSet { 
    if flag { 
     // stop spinning 
    } 
    } 
} 

func alertAction() { 
    // start spinning 
}