我正在使用 AVFoundation 和 AVAudioPlayerNode 创建一个 swift 应用程序。我在播放时禁用播放按钮,并在播放器的完成部分启用它,但该按钮保持透明超过 10 秒。 该按钮可用,我的 print("complete") 立即显示,因此 View 似乎没有更新。这是我的代码:
player.scheduleBuffer(buffer, completionHandler: {
print("complete")
self.playButton.enabled = true
}
)
我尝试了以下方法,但没有成功:
self.view.layoutIfNeeded()
player.scheduleBuffer(buffer, completionHandler: {
print("complete")
self.playButton.enabled = true
self.playButton.reloadInputViews()
self.view.layoutIfNeeded()
}
)
最佳答案
这可能是因为没有在负责更新 UI 的主线程上调用完成处理程序。
检查完成处理程序是否在主线程上运行,如果没有,则添加负责在主线程上更新 UI 的代码
为了快速检查 UI 没有立即更新的原因,试试这个,将代码放在完成处理程序中:
NSOperationQueue.mainQueue().addOperationWithBlock({
print("complete")
self.playButton.enabled = true
self.playButton.reloadInputViews()
self.view.layoutIfNeeded()
})
检查代码是否在主线程上运行可以像这样快速完成:
print(NSThread.isMainThread())
我假设你在寻找解决方案时放置了 layoutIfNeeded
,没有更大的上下文我不能 100% 肯定地说但可能你不需要它
关于ios - 以编程方式启用按钮需要几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34499433/