加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – ViewController幻灯片动画

发布时间:2020-12-14 02:28:24 所属栏目:百科 来源:网络整理
导读:我想在tabswitch [1]创建一个类似iOS app facebook的动画.我已经尝试开发某种动画,出现的问题是旧的视图控制器直接在交换机上变得不可见,而不是在新控制器快速滑动时缓慢淡出. 我发现这个问题How to animate Tab bar tab switch with a CrossDissolve slide
我想在tabswitch [1]创建一个类似iOS app facebook的动画.我已经尝试开发某种动画,出现的问题是旧的视图控制器直接在交换机上变得不可见,而不是在新控制器快速滑动时缓慢淡出.

我发现这个问题How to animate Tab bar tab switch with a CrossDissolve slide transition?,但正确的标记解决方案对我来说并不适用(它不是幻灯片,它是一个淡入淡出过渡).我还想得到的是向左或向右滑动以切换标签的功能.就像在旧版本的facebook上一样.

到目前为止我得到的是:

extension TabBarController: UITabBarControllerDelegate  {
    func tabBarController(_ tabBarController: UITabBarController,shouldSelect viewController: UIViewController) -> Bool {
        guard let fromView = selectedViewController?.view,let toView = viewController.view else { return false }
        if fromView != toView {
            toView.transform = CGAffineTransform(translationX: -90,y: 0)
            UIView.animate(withDuration: 0.25,delay: 0.0,options: .curveEaseInOut,animations: {
                toView.transform = CGAffineTransform(translationX: 0,y: 0)
            })
        }; return true
    }
}
class TabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }
}

如何解决这个问题?

[1]
我非常想从Facebook应用程序中添加一个gif.问题是我不想审查视频,只是透露了太多的数据. (即使fb已经拥有它们).另外在youtube上我找不到合适的录音.请在iOS的fb应用程序中自行尝试.

您可以使用以下想法: https://samwize.com/2016/04/27/making-tab-bar-slide-when-selected/

此外,这里是更新到Swift 4.1的代码,我也删除了强制解包:

import UIKit

class MyTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        delegate = self
    }
}

extension MyTabBarController: UITabBarControllerDelegate  {
    func tabBarController(_ tabBarController: UITabBarController,shouldSelect viewController: UIViewController) -> Bool {
        guard let tabViewControllers = tabBarController.viewControllers,let toIndex = tabViewControllers.index(of: viewController) else {
            return false
        }
        animateToTab(toIndex: toIndex)
        return true
    }

    func animateToTab(toIndex: Int) {
        guard let tabViewControllers = viewControllers,let selectedVC = 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
        fromView.superview?.addSubview(toView)

        // Position toView off screen (to the left/right of fromView)
        let screenWidth = UIScreen.main.bounds.size.width
        let scrollRight = toIndex > fromIndex
        let offset = (scrollRight ? screenWidth : -screenWidth)
        toView.center = CGPoint(x: fromView.center.x + offset,y: toView.center.y)

        // Disable interaction during animation
        view.isUserInteractionEnabled = false

        UIView.animate(withDuration: 0.3,usingSpringWithDamping: 1,initialSpringVelocity: 0,options: .curveEaSEOut,animations: {
                        // Slide the views by -offset
                        fromView.center = CGPoint(x: fromView.center.x - offset,y: fromView.center.y)
                        toView.center = CGPoint(x: toView.center.x - offset,y: toView.center.y)

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

因此,您需要继承UITabBarController并且还必须编写动画部分,您可以调整动画选项(延迟,持续时间等).

我希望它有所帮助,欢呼!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读