Ios 如何从计时器调用第一个函数后调用下面函数中的函数
这里是我的流程的简单形式。我仍然需要在#2完成后调用decisionMaker(),在时间结束时运行do,并将度量值的全局变量带到decisionMaker()进行案例测试 TestButtonTAPPED()和调用:Ios 如何从计时器调用第一个函数后调用下面函数中的函数,ios,swift,xcode,Ios,Swift,Xcode,这里是我的流程的简单形式。我仍然需要在#2完成后调用decisionMaker(),在时间结束时运行do,并将度量值的全局变量带到decisionMaker()进行案例测试 TestButtonTAPPED()和调用: 记录计时器() gatherInput() 选择器:levelTimerCallback() 决策者() 我不确定我是否理解您想要实现的目标:)@Asdrubal我希望#2在完成其任务后调用#4time@MSU_Bulldog这就是为什么我要问,我对关闭后的调度不熟悉。我抬头看
我不确定我是否理解您想要实现的目标:)@Asdrubal我希望#2在完成其任务后调用#4time@MSU_Bulldog这就是为什么我要问,我对关闭后的调度不熟悉。我抬头看了看,但还是很困惑(哈哈)。我会在我猜…:)之后查找dispatch_@iAction func手动点击(uSender:UIButton){clearGlobalVariablesOnTap()listner()soundRecorder.record()recordTimer()dbListener.gatherInput()}@Asdrubal有一个很好的观点,你的levelTimer正在重复,如果它停止,那么你必须在你的应用程序中的某个地方调用levelTimer.invalidate。如果是这种情况,那么这就是您希望为完成的#2执行操作的时间点。。还有密西西比州的斗牛犬#没问题。快乐地编写课程代码8现在对我大喊大叫-回到转换成swift 3
// 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()
}
@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
}