如何在计时器到期后(tvOS)从UIButton移除焦点

问题描述 投票:1回答:1

我正在设置一个简单的tvOS应用程序,其底部有一个菜单栏(包含按钮的堆栈视图)。闲置5秒钟后,我希望扩展坞隐藏(向下移动,不可见)并从当前已聚焦的按钮上移开焦点。扩展坞应重新出现并重新专注于远程控制活动。应用程序启动后,使用以下代码将扩展坞隐藏,但仅隐藏一次。任何帮助将不胜感激!

@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()
}
swift xcode uibutton tvos
1个回答
0
投票
@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{
        ($0 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{
        ($0 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()
  }
© www.soinside.com 2019 - 2024. All rights reserved.