如何连续闪烁对象直到应用被杀死?

问题描述 投票:1回答:4

在我的情节提要中,我有一个按钮想要无限次闪烁,直到程序被杀死。这是到目前为止我所做的,此代码使该按钮仅动画一次。

@IBOutlet weak var blinker: UIButton!

 func Blink(){
        blinker.alpha = 0.0
        UIButton.animateWithDuration(1, animations: {
            self.blinker.alpha = 1.0
            }, completion: {
                (value: Bool) in
                println(">>> Animation done.")
        })

    }

任何帮助将不胜感激。...

swift ios8 xcode6.4
4个回答
2
投票

如果您不打算使用CABasicAnimationCAAnimation的其他变体,最好的方法是递归执行。例如:

func Blink(){
        blinker.alpha = 0.0
        UIButton.animateWithDuration(1, animations: {
            self.blinker.alpha = 1.0
            }, completion: {
                (value: Bool) in
                println(">>> Animation done.")
                Blink()
        })

    }

这样,动画制作完成后,您会一次又一次地调用它...

更新

请参阅Glenn's answer以获取正确的处理方法。此解决方案可能会导致堆栈溢出问题。


2
投票

尽管以上答案可以,但是您可以使用.autoreverse | .repeat选项。那将是一种更干净的方法。


2
投票

确保您的按钮与ViewController的插座相连。

将此添加到Viewcontroller的ViewDidLoad中:

    timer = NSTimer(timeInterval: 1.0, target: self, selector: "blink", userInfo: nil, repeats: true)
    NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)

然后执行功能

func blink () {
        if blinkStatus == false {
            blinkingButton.tintColor = UIColor.lightGrayColor()
            blinkStatus = true
        } else {
            blinkingButton.tintColor = UIColor.blackColor()
            blinkStatus = false
        }
    }

这应该可以解决问题。我尝试了一下,它奏效了。它基于:https://www.weheartswift.com/nstimer-in-swift/


0
投票

有点儿含糊,基于我承认的Glenn's答案,但这是在iOS 13上测试的另一个答案,迅速5。

var blinkStatus:Bool?

Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { (timer) in
        if self.blinkStatus != nil {
          self.button.alpha = self.blinkStatus! ? 1:0
          self.blinkStatus = !self.blinkStatus!
        } else {
          self.button.alpha = 1
          timer.invalidate()
        }

设置blinkStatus = false使其开始闪烁,而blinkStatus = nil使其停止。显然,按钮必须是您要闪烁的UIButton距离。

© www.soinside.com 2019 - 2024. All rights reserved.