UIView.animate не двигается в правильном направлении - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть tabBarController, подключенный к 3 ViewController, и каждый ViewController встроен в NavigationController.Я настроил его так, что один из пользовательских ViewController будет скользить вверх перед текущим ViewController при нажатии на вкладке.Это работает нормально.

Тем не менее, пользовательский ViewController имеет кнопку «отмена», которая должна заставить его скользить вниз и открывать старый ViewController.Как бы я ни пытался это сделать, анимация не будет скользить в том направлении, в котором мне это нужно.По какой-то причине ViewController запускается с экрана, а затем пытается скользить по экрану.Как только он скользит, он исчезает и отображается старый контроллер вида.

Я хочу, чтобы он запускался на экране и скользил вниз.

Код анимации в TabBarController:

 func animateToTab(toIndex: Int) -> Bool {
        guard let tabViewControllers = viewControllers,
            let selectedVC = selectedViewController else { return false}

        guard let fromView = selectedVC.view,
            let toView = tabViewControllers[toIndex].view,
            let fromIndex = tabViewControllers.index(of: selectedVC),
            fromIndex != toIndex else { return false}


        // Add the toView to the tab bar view
        fromView.superview?.addSubview(toView)

        // Position toView off screen (above subview)
        let screenHeight = UIScreen.main.bounds.size.height
        let offset = -screenHeight
        toView.center = CGPoint(x: fromView.center.x, y: toView.center.y - offset)

        // Disable interaction during animation
        view.isUserInteractionEnabled = false

        UIView.animate(withDuration: 0.3,
                       delay: 0.1,
                       options: .curveEaseOut,
                       animations: {
                        // Slide the views by -offset
                        toView.center = CGPoint(x: toView.center.x, y: toView.center.y  + offset)

        }, completion: { finished in
            // Remove the old view from the tabbar view.
            fromView.removeFromSuperview()
            self.selectedIndex = toIndex
            self.view.isUserInteractionEnabled = true
        })
        return true
    }

Код анимации в ViewController, вызываемый функцией IBAction.

func animateToTab(toIndex: Int){
        let tabBar = self.tabBarController!
        guard let tabViewControllers = tabBar.viewControllers,
            let selectedVC = tabBar.selectedViewController else { return }

        guard let fromView = selectedVC.view,
            let toView = tabViewControllers[toIndex].view,
            let fromIndex = tabViewControllers.index(of: selectedVC),
            fromIndex != toIndex else { return }


        // Add the toView to the tab bar view
        toView.superview?.addSubview(fromView)

        // Position fromView on screen
        let screenHeight = UIScreen.main.bounds.size.height
        let offset = -screenHeight
        fromView.center = CGPoint(x: toView.center.x, y: fromView.center.y)
        // Disable interaction during animation
        tabBar.view.isUserInteractionEnabled = false

        UIView.animate(withDuration: 0.3,
                       delay: 0.1,
                       options: .curveEaseOut,
                       animations: {
                        // Slide the views by -offset
                        fromView.center = CGPoint(x: toView.center.x, y: fromView.center.y + offset)

        }, completion: { finished in
//             Remove the old view from the tabbar view.
            fromView.removeFromSuperview()
            tabBar.selectedIndex = toIndex
            tabBar.view.isUserInteractionEnabled = true
        })
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...