如何将TabBar向上滑动以将其隐藏在tvOS应用程序中?

时间:2016-02-17 03:08:18

标签: swift uitabbarcontroller tabbar tvos

在我的tvOS应用程序中,我有一个带有3个viewControllers的TabBarController。我想要做的是当我切换到下一个viewController时自动隐藏/更改tabBar的焦点。

我在这里看到了一些帖子,因此建议在tabBar上更改alfa,但是我希望有一个上滑动画,就像在viewController中将焦点更改为某些内容时一样。

非常感谢任何形式的帮助。

3 个答案:

答案 0 :(得分:1)

正如Charles所说..在派生的UITabBarController中有这样的东西:

var focusOnChildVC : Bool = false {
    didSet {
        self.setNeedsFocusUpdate()
    }
};


override weak var preferredFocusedView: UIView? {
    get {
        let v : UIView?;

        let focused = UIScreen.mainScreen().focusedView

        //A bit of a hack but seems to work for picking up whether the VC is active or not
        if (focusOnChildVC && focused != nil) {
            v = self.selectedViewController?.preferredFocusedView
        } else {
            //If we are focused on the main VC and then clear out of property as we're done with overriding the focus now
            if (focusOnChildVC) {
                focusOnChildVC = false
            }                
            v = super.preferredFocusedView;
        }
        return v
    }
}

答案 1 :(得分:0)

下面描述的解决方案的基本思想是子类Enumerator并有选择地使用UITabBarController的{​​{1}}实现或者返回super的{​​{1}}实现{ {1}}设置触发焦点更新的weak var preferredFocusedView: UIView? { get }并设置控制selectedViewController?.preferredFocusView实现的标志。

更详细地说,子类didUpdateFocusInContext(_:withAnimationCoordinator:)并覆盖NSTimer。在您的实现中(确保调用preferredFocusView实现),您可以检查上下文并确定UITabBarController属性的后代视图是didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator)还是super(并且tabBar不是后代。)

如果标签栏获得焦点,您可以在隐藏标签栏之前创建nextFocusedView。如果标签栏在计时器触发之前失去焦点,则使其无效。如果计时器触发,请拨打previousFocusedView,然后拨打nextFocusedView

要使其工作所需的最后一部分是在设置计时器时设置为NSTimer的标志。然后,如果标记为setNeedsFocusUpdate(),并且updateFocusIfNeeded()返回true,则需要覆盖weak var preferredFocusedView: UIView? { get }并调用super实现。

答案 2 :(得分:0)

您可以在UITabBarController子类中做到这一点:

#pragma comment(lib, "NtosKrnl.lib")