Search code examples
iosxcodeanimationcaanimationwatchkit

How to hide and show WKInterfaceGroup programmatically with animation?


The solution in this question* uses setHidden to hide and unhide a WKInterfaceGroup:

    atypeofGroup.setHidden(true)
    atypeofGroup.setHidden(false)

But the problem is, the group will appear and disappear abruptly, it doesn't look professional. Can someone guide me please? Not sure whether it is related to this:

    atypeofGroup.animationDidStart(anim: CAAnimation!)

*hide and show WKInterfaceGroup programmatically


Solution

  • This is a great question, but it just isn't possible to animate a change between two groups with the current implementation of WatchKit. I definitely wish it was as well.

    The only options you have are to switch interface controllers entirely through the reloadRootControllersWithNames:contexts: or to show/hide a couple of groups using the approach you listed first. Here's a small example of how you could switch from a SimpleInterfaceController to a FirstInterfaceController and SecondInterfaceController in a page set.

    class SimpleInterfaceController : WKInterfaceController {
        override func willActivate() {
            super.willActivate()
    
            let names = ["FirstInterfaceIdentifier", "SecondInterfaceIdentifier"]
            WKInterfaceController.reloadRootControllersWithNames(names, contexts: nil)
        }
    }
    

    I am not sure where you found the following code snippet, but it is certainly not part of the public APIs on WKInterfaceGroup.

    atypeofGroup.animationDidStart(anim: CAAnimation!)
    

    While I understand none of these answers are ideal, they are all we have access to at the moment. If you have the time, I'd suggest filing a feature request on Apple's bug reporting system.