写在之前

系统的弹框虽然很好看,但是有时候无法完全满足UI设计的需求,比如说中间要显示一个输入框,或者要放置一张图片,这里介绍一个很早之前的自定义弹框库,这个自定义弹框sdk写的很细致,定制性很强,几乎可以做到完全改写,附下载链接

与系统弹框不同的是这个库支持以下功能:
1. 仿原生弹框样式
2. 可自定义下方按钮颜色字体个数,可自定义title文字、message文字样式
3. 可自定义弹框大小高度,中间支持大图滑动
4. 支持按钮上方横线隐藏显示
5. 可传入自定义contentView进去
6. 可以定义自己控制alert消失时间
7. 可以同时管理多个弹框,最后面调用的

先展示一下支持的弹框样式:

代码解析:

整个一个alert由三大块组成,顶部一个滚动视图放title,中间一个滚动视图contentScrollView放contentView,下面一个滚动视图bottomScrollView放按钮

视图结构如下:

CXAlertButtonContainerView继承UIScrollView 组成部分:

CXAlertButtonItem继承自UIButton成员结构如下:

类名 属性类型 属性名称
NSString title
CXAlertButtonItem CXAlertViewButtonType type
CXAlertButtonHandler action
BOOL defaultRightLineVisible

CXAlertViewController 用来进行弹框的controller

下面介绍一下整个sdk从创建到show的代码逻辑:

1、创建逻辑:

  1. 走initialize方法初始化一些固定常规信息,这边不调用各属性的set方法-主要是不怎么改变的信息
  2. 首先判断传入的是message就创建一个Label传入作为contentView
  3. 走initWithTitle:contentView:cancelButtonTitle:方法初始化一些自定义信息
  4. 创建三个滚动视图
  5. 有add按钮就去添加按钮
  6. 调用show方法
  7. 调用各种属性set信息,这个之后各种变量才会有值,之前都是没有值的
  8. 调用layoutSubviews

2、show逻辑:

假如一次性弹多个弹框ABC,他会先显示A然后隐藏A,显示B隐藏B,显示C,dismissC再去显示B,Bdismiss之后显示A,其实这边可以考虑参考系统的每次只让显示一个Alert,后面弹出的无效

  • 变量介绍:

    1. _containerView用来放整个视图的
    2. __cx_pending_alert_queue:NSMutableArray 存放本alert是否被添加
    3. __cx_alert_animating:BOOL 是否动画中
    4. __cx_alert_current_view: CXAlertView 记录当前被弹出的alert
    5. __cx_alert_background_window: 做半透明背景色渐变的window
    6. isVisible: 当前弹框是否可见
    7. layoutDirty: 防止validateLayout被多次调用
    8. willShowHandler 各种时机的block回调
  • 函数调用中逻辑

    1. __cx_alert_background_window背景色0.4纯黑色,0.3秒alpha在内从0->1
    2. 创建新window 根视图为CXAlertViewController,细化为下面测操作
    3. 直接切换当前为新window

CXAlertViewController内部进行如下操作:
1. self.view = self.alertView
1. self.alertView 调用setup
1. setup内部操作:
(1、初始化弹框的背景视图_containerView
2、检测初始化内部三块滚动视图初始化情况,未初始化就初始化
3、设置各块视图的位置大小,
4、动画展示alert)

3、dismiss逻辑:

  1. __cx_pending_alert_queue 移除self
  2. _containerView 0.25秒内alpha从 1->0
  3. __cx_alert_background_window 0.3秒内alpha从 1->0
  4. 执行dismissComplete,由于可以显示多个弹框,检测有没有之前的弹框重新show出来

tips

由于这个新的alert类应用于项目中还没有很长时间,所以应该会有缺陷,以后会渐渐改进
现在的alert支持多弹框,在考虑要不要改成系统类似只能弹出一个框
现在的点击事件是在按钮被点击的时候直接回调block,考虑改成消失之后再去调用

自定义IOS系统弹框相关推荐

  1. IOS精品源码,仿探探UIButton封装iOS提示弹框迅速引导页自定义导航栏

    1.仿 探探UI Swift ,重用机制 2.超强UIButton封装 3.一行代码集成UIPickerView,界面完全自定义 4.iOS提示弹框 5.swift UITableView / UIC ...

  2. android 系统弹框与自定义弹框

    1. 系统弹框 private AlertDialog alertDialog; private void tipDialog(String value) {         if (alertDia ...

  3. android 仿ios 底部弹出,项目需求讨论-仿ios底部弹框实现及分析

    hi,在项目开发中,有时候需要仿照ios的底部弹框做效果,比如我们在iPhone上面关闭定位的时候,就会弹出ios特有的底部弹框: 屏幕快照 2017-10-09 08.20.30 PM.png 弹框 ...

  4. ios wkwebview弹框_iOS WKWebView的使用

    级别:★☆☆☆☆ 标签:「WKWebView」「WKWebView加载新页面失败」「WKWebView 弹框没有显示」「WKWebView 打开其他应用」 作者: WYW 审校: QiShare团队 ...

  5. ios wkwebview弹框_iOS 加载WKWebView

    WKWebView是苹果在iOS 8之后推出的框架WebKit中的浏览器控件, 其加载速度比UIWebView快了许多, 但内存占用率却下降很多, 也解决了加载网页时的内存泄露问题. WKWebVie ...

  6. ios 系统提示框_经验分享:新购买移动硬盘格式化为Windows系统和Mac系统同时可以使用的方法...

    经常使用硬盘的小伙伴们都知道,新买的移动硬盘,要想在Windows系统使用的话是可以直接使用的,因为一般情况下新买的移动硬盘格式是适用于Windows系统的NTFS格式:如果想让该移动硬盘也能在苹果的 ...

  7. ios 系统提示框_二个消息:关于iOS12.2和iOS13 beta 1系统功能

    今天分享最新三条消息: 1.iOS12.2 取消低电量提示声 2.iOS13 beta 1 曝光新功能 一.iOS12.2 取消低电量提示声 国行版设备 iOS12.2 取消低电量提示声,在此之前旧版 ...

  8. Android仿微信朋友圈2自定义点赞评论弹框

    最近在做类似微信朋友圈点赞评论的功能,有个点赞评论弹框交互,感觉效果很好,点击评论按钮弹框从按钮左边弹出,遇到了3个问题(弹出动画不对.弹框布局没有适配.弹出的位置显示不对),动画和布局好解决,弹出的 ...

  9. Flutter 系统弹框

    生成普通弹框 //其中build 定义返回widget ,所以可以自定义 showDialog(context: context, builder: builder) 生成底部弹框 showModal ...

最新文章

  1. 《iOS 6核心开发手册(第4版)》——2.1节UIControl类
  2. CodeForces - 1328E Tree Queries(dfs序/LCA)
  3. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统
  4. java获取当月有几天_腾讯程序员裸辞3个月,转行去送外卖,曝出当月收入网友:又骗我去送外卖...
  5. 贴一下目前的工作任务列表
  6. python80行代码写一个文件整理软件
  7. 物理安全是指保护计算机,计算机网络 物理安全
  8. 刷脸AI供应商下调业绩预期,苹果股价应声跌掉一个小米
  9. python中re是什么库_Python正则表达式和re库知识点总结
  10. 阿里云祝顺民:因云而生的云原生网络
  11. 命令行编译java文件
  12. 廖雪峰Git教程:远程仓库
  13. storm风暴英雄 tempo_Tempostorm攻略 10tips避免不合时宜之死
  14. 为什么我们说“买东西”,而不说“买南北”?
  15. 体验篇 - 部署以太坊私有链 (PoA)
  16. java 合并pdf报错,[Java教程]java合并PDF文件
  17. 君子签电子合同为供应链行业赋能,实现企业降本增效
  18. 从前有座灵剑山--理想以及狂热(6)
  19. css---7自定义字体
  20. IEEE SCI期刊、会议模板下载

热门文章

  1. 澳洲技术移民评分标准
  2. SpringBoot之自动装配原理
  3. 机器学习:线性回归梯度下降预测波士顿房价
  4. GMA Round 1 奇怪的数列
  5. RK系列开发板音频驱动适配指南(一)
  6. 多人同步在线编辑文档(onlyoffice)服务器部署-测试
  7. 小米电视 android版本升级,小米电视2系统版本多久更新一次
  8. 台湾大学神经网络架构设计
  9. Excel用底纹突出单元格的数据给Excel单元格添加底纹效果
  10. 浅谈图数据库1:什么是图?