Swifty转场动画和侧滑动画,并实现了微信的侧滑浮窗效果

看了一些网上的实现效果,主要是悬浮窗的,转场动画都没能做到微信的效果。作为完美主义者,还是觉得有所欠缺,于是想着就自己做吧 。另外也是对转场动画做的比较多,做一个总结。

效果图

image

image

说明

侧滑动画结束后展示悬浮球没有做,一个是不属于转场动画,二个是已经有不错的实现效果了。如果有自己的悬浮窗实现,想添加进去,该库也有相应的协议支持扩展。
该库的目的做成一个方便扩展,低耦合的转场和侧滑动画的库, 后面会添加对present的支持,以及会增加更多的动画效果。

使用介绍

1. 设置UINavigationController delegate

class NavigationController: UINavigationController {

 // 微信悬浮窗效果的转场动画控制器
    let floatingControl: FloatingKeeperControl = {
        let control = FloatingKeeperControl()
        // 设定需要动画效果
        //        control.floatingTransitionProducer.underAnimationType =
        //        control.floatingTransitionProducer.uponAnimationType =
        return control
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设定好转场动画控制器之后,设置为UINavigationController 的delegate
        // 若已设置, 则需要实现NavigationInteractiveControlType,并
        // 重写 navigationController(_:animationControllerFor:from:to:) 和 navigationController(_:interactionControllerFor:)方法,
        // 可参照 GeneralTransitionControl
        delegate = floatingControl
   }
}

2. 添加自定义侧滑效果

override func viewDidLoad() {
      super.viewDidLoad()
      
      /// 默认的手势是左侧,向右侧滑。
      /// 如果你的设置的Transition动画是从左侧push,则这里设定为.right
      if let gesture = self.lm.interactivePop(.left) {
          view.addGestureRecognizer(gesture)
      }
  }

3. 实现协议 FloatingKeepAble

// FloatingKeepAble 协议不需要额外实现,只需要添加给需要触发 UIViewController即可
// 该协议用于微信浮窗效果。只需要转场和侧滑动画只需要1和2即可
class FloatingAbleViewController: UIViewController, FloatingKeepAble {
// your implement 
}

设计思路

主要是3个协议

  • NavigationInteractiveControlType: 管理下面两个工厂类。并可以方便的组合和替换他们
  • InteractiveProducerType: 生成侧滑动画UIViewControllerInteractiveTransitioning对象
  • AniTransitionProducerType: 生成转场动画UIViewControllerAnimatedTransitioning对象

Tips

已有悬浮球的实现,想添加进去,做成完整的浮窗效果。可以实现FloatingBarManagerType 协议。然后调用下面的方法

FloatingKeeperManager.shared.floatingBarManager = your floating bar manager

源码

github源码

你可能感兴趣的:(Swifty转场动画和侧滑动画,并实现了微信的侧滑浮窗效果)