ios如何设置为随机颜色在计时器 swift 2?

发布时间: 2017/4/3 15:00:32
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要设置计时器并更改背景颜色每隔 5 秒。

我写了随机颜色代码和其工作的完美,但我试着把函数放在 NSTimer 和我变得粉碎。

2016-03-05 14:46:48.774 Boo 冒险 [6782:365555] * * * 终止应用程序已经高度未捕获的异常 'NSInvalidArgumentException',原因: '-[Boo_Adventure.GameScene 更新]: 无法识别选择器发送到实例 0x7fe2cb741ac0'

游戏的场景︰

extension CGFloat {
    static func random() -> CGFloat {
        return CGFloat(arc4random()) / CGFloat(UInt32.max)
    }
}


extension UIColor {
    static func randomColor() -> UIColor {
        let r = CGFloat.random()
        let g = CGFloat.random()
        let b = CGFloat.random()

        // If you wanted a random alpha, just create another
        // random number for that too.
        return UIColor(red: r, green: g, blue: b, alpha: 2.5)
    }
}

override func didMoveToView(view: SKView) {

        Timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "update", userInfo: nil, repeats: false)

        func update() {

            self.view!.backgroundColor = UIColor.randomColor()

        }
}

谢谢你 !

解决方法 1:

这里有几个问题︰

1) 您想要更改的颜色每隔 5 秒钟,但您设置 repeats 的参数 false ,所以您自定义 update () 方法将执行只有一次。改变 repeatstrue

2) 你试图更改视图 (SKView) 的背景色而不场景的背景颜色。

这里是你如何能做到与 NSTimer :

override func didMoveToView(view: SKView) {
      let timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "update", userInfo: nil, repeats: true)
}

func update(){
      backgroundColor = UIColor.randomColor()
}

但是 NSTimer 不受现场的或视图的暂停状态,所以它可以带你到在某些情况下的问题。若要避免此问题,可以使用 SKAction 。与 SKAction 相同的事情看起来像这样︰

override func didMoveToView(view: SKView) {

        let wait = SKAction.waitForDuration(5)

        let block = SKAction.runBlock({
            [unowned self] in
            self.backgroundColor = UIColor.randomColor()
        })

        let sequence = SKAction.sequence([wait,block])

        runAction(SKAction.repeatActionForever(sequence), withKey: "colorizing")

    }

这种方式,如果您暂停你的场景或视图,着色行动将暂停自动 (和未暂停场景/视图时未暂停)。

赞助商