警报延迟 - iOS swift

时间:2016-04-28 12:50:27

标签: ios swift delay

创建游戏时,只要用户正确回答或完成时间,就会显示警报。我正在使用GitHub的SweetAlert类。 在提醒警报之前播放声音。 我面临一个烦人的问题。当警报第一次显示时,我会一直延迟。所有其他时间都很好。

我认为问题出在声音上,我使用prepareToPlay,我试图在后台队列上运行声音,但仍然是相同的。

这是我的代码。

此代码适用于游戏结束时

func updateTime() {
    let shouldTimerStop = timeManager.updateTime()
    if timeManager.time <= 30 {
        timerLabel.textColor = UIColor.redColor()
        SoundManager.backgroundMusicSharedInstance!.volume = 0.05
        //if !clockSoundIsPlaying {
        SoundManager.playClockSound()
            //clockSoundIsPlaying = true
        //}
    }
    timerLabel.text = timeManager.displayedTime(timeManager.time)
    if shouldTimerStop {
        SoundManager.clockSoundSharedInstance!.stop()
        //SoundManager.backgroundMusicSharedInstance?.volume = 0.05
        timer.invalidate()
        timer = NSTimer()
        ///////////////////////////////////////////////////////////
        let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
        dispatch_async(backgroundQueue, {
            SoundManager.playGameOverSound()
        })
        ////////////////////////////////////////////////////////////
        SweetAlert().showAlert("Game Over!", subTitle: "Better luck next time!", style: AlertStyle.Error, buttonTitle:"Restart", buttonColor:UIColor(red: 56.0/255.0, green: 163.0/255.0, blue: 221.0/255.0, alpha: 1.0) , otherButtonTitle:  "Main Menu", otherButtonColor: UIColor(red: 56.0/255.0, green: 163.0/255.0, blue: 221.0/255.0, alpha: 1.0)) { (isOtherButton) -> Void in
            if isOtherButton == true {
                self.score = 0
                self.scoreLabel.text = "Score: \(self.score)"
                self.timeManager.resetTimer()
                self.resetUI()
            }
            else {
                // go to main menu
                self.performSegueWithIdentifier("backToMainMenu", sender: self)
            }
            SoundManager.backgroundMusicSharedInstance!.volume = 0.2
        }

    }
}

以下是答案正确的代码

func correctAnswer() {
        SoundManager.backgroundMusicSharedInstance!.volume = 0.05
        if self.timeManager.time <= 30{
            SoundManager.stopClockSound()
        }
        let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
        dispatch_async(backgroundQueue, {
            SoundManager.playCorrectSound()
        })
        self.timer.invalidate()
        SweetAlert().showAlert("Good job!", subTitle: "You passed the level!", style: AlertStyle.Success, buttonTitle:"Continue", buttonColor:UIColor.init(red: 56/255, green: 163/255, blue: 221/255, alpha: 1)) { (isOtherButton) -> Void in
            if isOtherButton == true {
                self.continueWithTheGame()

            }
        }

    }

2 个答案:

答案 0 :(得分:2)

您是在模拟器或真实设备上进行测试吗?它可能只是你的设备。如果您使用的是模拟器,则可能会滞后。这发生在我的应用程序中,但它刚刚停止发生。您的代码中似乎没有任何可能导致此问题的内容。

答案 1 :(得分:2)

这个问题似乎有类似的问题......

issue