在Swift中不断检查响应

时间:2016-10-12 07:36:00

标签: ios swift nstimer

我有一个名为flag的布尔变量,初始值为false。基于成功的过程,它设置为true。有一个按钮alert,当点按它时,它会检查标记的值以及UI上的旋转图像,如果flag为真,则应显示成功消息。否则,应该继续进行反应检查(10次,持续5秒)。

这是我的功能。我一直在使用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秒)。我希望不间断地连续旋转图像。有人可以帮忙吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

轮询是最绝望的异步模式,几乎总是错误的。了解一下价值观察和反应模式。

{% if(heroName == "Zeus" || heroName == "Odin"){ %}
<h2>HTML for zeus or odin</h2>
{% } else { %}
<h2>HTML for anyone else </h2>
{% }%}

答案 1 :(得分:1)

根据我的理解,此代码将按您的意图执行。如果您使用的是UIActivityIndi​​cator。确保在我启动rotationAnimation的地方启动它,并在使计时器失效时停止它。

Swift 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
    }
}