如何在计时器过期后从 UIButton 移除焦点(tvOS)
How to remove focus from UIButton after Timer has expired (tvOS)
我正在设置一个简单的 tvOS 应用程序,底部有一个菜单停靠栏(包含按钮的堆栈视图)。 inactivity 5 秒后,我希望停靠栏隐藏(向下移动,超出视野)并从当前获得焦点的按钮上移除焦点。扩展坞应重新出现并重新聚焦于遥控器 activity。使用以下代码,停靠栏会隐藏,但只会在应用程序启动后隐藏一次。任何帮助将不胜感激!
@IBOutlet weak var menuDock: UIStackView!
var timer = Timer()
func resetTimer() {
timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.showDock))
self.view.addGestureRecognizer(tapRecognizer)
}
@objc func hideDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y += 240
}, completion: nil)
timer.invalidate()
}
@objc func showDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y -= 240
}, completion: nil)
timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
timer.invalidate()
}
@IBOutlet weak var menuDock: UIStackView!
var timer = Timer()
func resetTimer() {
timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.showDock))
self.view.addGestureRecognizer(tapRecognizer)
}
@objc func hideDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y += 240
self.menuDock.arrangedSubviews.forEach{
([=10=] as? UIButton)?.isEnabled = false
}
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
}, completion: nil)
timer.invalidate()
}
@objc func showDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y -= 240
self.menuDock.arrangedSubviews.forEach{
([=10=] as? UIButton)?.isEnabled = true
}
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
}, completion: nil)
timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
timer.invalidate()
}
我正在设置一个简单的 tvOS 应用程序,底部有一个菜单停靠栏(包含按钮的堆栈视图)。 inactivity 5 秒后,我希望停靠栏隐藏(向下移动,超出视野)并从当前获得焦点的按钮上移除焦点。扩展坞应重新出现并重新聚焦于遥控器 activity。使用以下代码,停靠栏会隐藏,但只会在应用程序启动后隐藏一次。任何帮助将不胜感激!
@IBOutlet weak var menuDock: UIStackView!
var timer = Timer()
func resetTimer() {
timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.showDock))
self.view.addGestureRecognizer(tapRecognizer)
}
@objc func hideDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y += 240
}, completion: nil)
timer.invalidate()
}
@objc func showDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y -= 240
}, completion: nil)
timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
timer.invalidate()
}
@IBOutlet weak var menuDock: UIStackView!
var timer = Timer()
func resetTimer() {
timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.showDock))
self.view.addGestureRecognizer(tapRecognizer)
}
@objc func hideDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y += 240
self.menuDock.arrangedSubviews.forEach{
([=10=] as? UIButton)?.isEnabled = false
}
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
}, completion: nil)
timer.invalidate()
}
@objc func showDock() {
UIView.animate(withDuration: 0.5, animations: {
self.menuDock.frame.origin.y -= 240
self.menuDock.arrangedSubviews.forEach{
([=10=] as? UIButton)?.isEnabled = true
}
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
}, completion: nil)
timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.hideDock), userInfo: nil, repeats: true)
timer.invalidate()
}