JXPopupView:一个轻量级的自己设置视图弹出框架

摘要:前言随着APP业务增多,各种五花八门的弹框也增多,各种细节都需要得到不同的定制。最后就沉淀出JXPopupView这个库,可以应对多类需求,轻巧灵活,不再为弹框忧愁了。最近看了一篇文章阿里云的这群疯子,深有感触,很多牛逼的东西都是逼出来的,而不是一个天才凭一己之力创造出来的。就像文章里面说的,随着淘

前言

随着APP业务增多,各种五花八门的弹框也增多,各种细节都需要得到不同的定制。最后就沉淀出JXPopupView这个库,可以应对多类需求,轻巧灵活,不再为弹框忧愁了。

最近看了一篇文章阿里云的这群疯子,深有感触,很多牛逼的东西都是逼出来的,而不是一个天才凭一己之力创造出来的。就像文章里面说的,随着淘宝业务剧增,云服务再不更新,就会由于技术瓶颈导致业务停滞,也可能导致淘宝的失败。

对于我们普通开发者来说,不可能一来就写出兼容任何需求的代码(随着经验添加,可以写出扩展性强的代码)。我们要做的是,在业务不断变化的时候,也在不断思考,不断优化代码,沉淀出一个经得起考验的框架。

说了一点鸡汤哈,下面来看看JXPopupView的细节效果。

Github

下载源码,一睹为快!JXPopupView

特性

  • 默认提供丰富的动画效果,而且可以灵活的扩展配置,只需遵从并实现JXPopupViewAnimationProtocol协议就可;
  • 使用灵活,通过view封装,可以在任何view上面展现,并不局限于UIViewController;
  • 背景配置方便,借鉴了MBProgressHUD对背景视图的解决逻辑,可以灵活配置;
  • 交互细节可配置,提供了isDismissibleisInteractiveisPenetrable属性进行配置

预览

动画效果

动画效果GIF
渐隐渐现FadeInOut.gif
缩放ZoomInOut.gif
往左Leftward.gif
往右Rightward.gif
往下Downward.gif
往上Upward.gif
部分自己设置-弹性动画Spring.gif
完全自己设置动画CustomAnimation.gif

背景风格

背景风格GIF
固定色值FadeInOut.gif
blur lightBlurlight.gif
blur darkBlurDark.gif

指定containerView

指定containerViewGIF
WindowZoomInOut.gif
UIViewController.viewVCView.gif
CustomViewCustomView.gif

要求

Swift 4.2编写,支持iOS9以上

安装

CocoaPods

在Podfile文件里面增加

pod 'JXPopupView'

而后再pod install(最好先pod update)

使用

//- 确定contentView的目标framelet contentView = Bundle.main.loadNibNamed("TestAlertView", owner: nil, options: nil)?.first as? TestAlertViewlet x: CGFloat = (containerView.bounds.size.width - 200)/2let y: CGFloat = (containerView.bounds.size.height - 200)/2contentView.frame = CGRect(x: x, y: y, width: 200, height: 200)//- 确定动画效果var animator = JXPopupViewFadeInOutAnimator()//- 初始化JXPopupViewlet popupView = JXPopupView(containerView: containerView, contentView: contentView, animator: animator!)//- 配置交互popupView.isDismissible = truepopupView.isInteractive = truepopupView.isPenetrable = false//- 配置背景popupView.backgroundView.style = self.backgroundStylepopupView.backgroundView.blurEffectStyle = self.backgroundEffectStylepopupView.backgroundView.color = self.backgroundColor//- 展现popupViewpopupView.display(animated: true, completion: nil)//- 消失popupView//通过extension提供的jx_popupView属性,获取JXPopupView进行操作,可以不用全局持有JXPopupView属性contentView.jx_popupView?.dismiss(animated: true, completion: nil)

动画自己设置

JXPopupViewAnimationProtocol协议方法

/// 初始化配置动画驱动器    ///    /// - Parameters:    ///   - contentView: 自己设置的弹框视图    ///   - backgroundView: 背景视图    ///   - containerView: 展现弹框的视图    /// - Returns: void    func setup(contentView: UIView, backgroundView: JXBackgroundView, containerView: UIView)    /// 解决展现动画    ///    /// - Parameters:    ///   - contentView: 自己设置的弹框视图    ///   - backgroundView: 背景视图    ///   - animated: 能否需要动画    ///   - completion: 动画完成后的回调    /// - Returns: void    func display(contentView: UIView, backgroundView: JXBackgroundView, animated: Bool, completion: @escaping ()->())    /// 解决消失动画    ///    /// - Parameters:    ///   - contentView: 自己设置的弹框视图    ///   - backgroundView: 背景视图    ///   - animated: 能否需要动画    ///   - completion: 动画完成后的回调    func dismiss(contentView: UIView, backgroundView: JXBackgroundView,animated: Bool, completion: @escaping ()->())

自己设置动画建议

  • 现有动画微调
    继承对应的animator,重载协议方法,进行微调。参考demo工程的JXPopupViewSpringDownwardAnimator类。

  • 完全自己设置动画
    可以继承JXPopupViewBaseAnimator或者者自己新建一个类,遵从JXPopupViewAnimationProtocol协议,实现对应方法就可。参考demo工程的JXPopupViewCustomAnimator

  • 全部评论(0)
手机二维码手机访问领取大礼包
返回顶部