如何在第一次从定时器完成后调用下面函数中的函数

时间:2016-08-03 16:42:12

标签: ios swift xcode

这是我的简单形式的流程。我仍然需要调用decisionMaker(),当#2完成后运行完成时间为up并将测量的全局变量带到决策者()进行案例测试

TestButtonTAPPED()并调用:

  1. recordTimer()
  2. gatherInput()

  3. selector:levelTimerCallback()

  4. 决策者()

    // 1.
    func recordTimer() {
        /* After 10 seconds, let's stop the recording process */
        let delayInSeconds = 10.0
        let delayInNanoSeconds = DispatchTime.now() + Double(Int64(delayInSeconds * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
    
        DispatchQueue.main.after(when: delayInNanoSeconds, execute: {
            self.soundRecorder!.stop()
            self.handBtn.isHidden = false
        })
    
    }
    
    // 2.
    func gatherInput() {
        levelTimer = Timer.scheduledTimer(timeInterval: 0.9, target: self, selector: #selector(DBListener.levelTimerCallback), userInfo:nil, repeats: true)
    }
    
    //3.
    func levelTimerCallback() {
        if soundRecorder.averagePower(forChannel: 0) > -30
        {
            // Do gathering for vaiables
        }
    }
    
    
    // 4.
    func decisionMaker() {
        // case statments here for final measurement
    }
    
    
    
    @IBAction func handTapped(_ sender: UIButton) {
    
        clearGlobalVariablesOnTap()
        listner()
        soundRecorder.record()
        recordTimer()
        dbListener.gatherInput()
    
    }
    

1 个答案:

答案 0 :(得分:0)

@IBAction func handTapped(_ sender: UIButton) {
    clearGlobalVariablesOnTap()
    listner()
    soundRecorder.record()
    recordTimer()
}

func recordTimer() {

    //As soon as this method is called this portion will get executed
    dbListener.gatherInput()

    /* After 10 seconds, let's stop the recording process */
    let delay = 10.0
    let delayInSeconds = DispatchTime.now() + DispatchTimeInterval.seconds(delay)


    //After 10 seconds this block will execute
    DispatchQueue.main.after(when: delayInSeconds, execute: {
        self.soundRecorder!.stop()
        self.handBtn.isHidden = false
        self.levelTimer.invalidate = true
        self.decisionMaker()
    })

}

func gatherInput() {
    levelTimer = Timer.scheduledTimer(timeInterval: 0.9, target: self, selector: #selector(DBListener.levelTimerCallback), userInfo:nil, repeats: true)
}

func levelTimerCallback() {
    if soundRecorder.averagePower(forChannel: 0) > -30
    {
        // Do gathering for vaiables
    }
}


func decisionMaker() {
    // case statments here for final measurement
}