
随着APP业务增多,各种五花八门的弹框也增多,各种细节都需要得到不同的定制。最后就沉淀出JXPopupView这个库,可以应对多类需求,轻巧灵活,不再为弹框忧愁了。
最近看了一篇文章阿里云的这群疯子,深有感触,很多牛逼的东西都是逼出来的,而不是一个天才凭一己之力创造出来的。就像文章里面说的,随着淘宝业务剧增,云服务再不更新,就会由于技术瓶颈导致业务停滞,也可能导致淘宝的失败。
对于我们普通开发者来说,不可能一来就写出兼容任何需求的代码(随着经验添加,可以写出扩展性强的代码)。我们要做的是,在业务不断变化的时候,也在不断思考,不断优化代码,沉淀出一个经得起考验的框架。
说了一点鸡汤哈,下面来看看JXPopupView的细节效果。
下载源码,一睹为快!JXPopupView
JXPopupViewAnimationProtocol协议就可;MBProgressHUD对背景视图的解决逻辑,可以灵活配置;isDismissible、isInteractive、isPenetrable属性进行配置| 动画效果 | GIF |
|---|---|
| 渐隐渐现 | FadeInOut.gif |
| 缩放 | ZoomInOut.gif |
| 往左 | Leftward.gif |
| 往右 | Rightward.gif |
| 往下 | Downward.gif |
| 往上 | Upward.gif |
| 部分自己设置-弹性动画 | Spring.gif |
| 完全自己设置动画 | CustomAnimation.gif |
| 背景风格 | GIF |
|---|---|
| 固定色值 | FadeInOut.gif |
| blur light | Blurlight.gif |
| blur dark | BlurDark.gif |
| 指定containerView | GIF |
|---|---|
| Window | ZoomInOut.gif |
| UIViewController.view | VCView.gif |
| CustomView | CustomView.gif |
Swift 4.2编写,支持iOS9以上
在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类