swift4.2 - 一个自定义view弹框
- import UIKit
- /*
- * 注册协议view:没找到 UI原图,咱不实现
- */
- class JYRegisterProtocolView: UIView {
- /// 点击同意协议的回调
- private var clickSelectedBtnBlock:((_ isSelected:Bool) -> Void)?
- /// 点击完成按钮的回调
- private var clickCompleteBtnBlock:(() -> Void)?
- /// 单例属性
- static let share : JYRegisterProtocolView = {
- let view = JYRegisterProtocolView()
- return view
- }()
- /// 背景view
- private lazy var bgView : UIView = {
- let v = JYUIModel.createView()
- v.layer.cornerRadius = 25
- v.layer.masksToBounds = true
- return v
- }()
- /// 注册协议标题
- private lazy var titleLabel : UILabel = JYUIModel.creatLabe(text: "注册协议", font: UIFont.systemFont(ofSize: 30), textColor: UIColor.red, textAlignment: NSTextAlignment.center)
- /// 副标题标题
- private lazy var subtitleLabel : UILabel = {
- let lab = JYUIModel.creatLabe(text: "疯抢进10万元现金,等你来拿!\n\n参赛资格:剑琅联盟使用用户中:\n1.店铺老板 \n2.店铺发型师 \n3.店铺美甲师 \n活动有效期:2019.1.1~2019.3.31\n \n活动共五期 没齐活动奖励:\n第一名8000元(推荐员工奖励5000元现金,所在店铺老板奖励3000元现金)\n第二名 3000元 \n第三名 2000元", font: UIFont.systemFont(ofSize: 15), textColor: UIColor.red, textAlignment: NSTextAlignment.left)
- lab.numberOfLines = 0
- return lab
- }()
- /// 选择按钮
- private lazy var selectedBtn : UIButton = {
- let btn = JYUIModel.createBtn()
- btn.addTarget(self, action: #selector(clickSelectedBtn), for: UIControl.Event.touchUpInside)
- btn.backgroundColor = UIColor.orange
- return btn
- }()
- /// 同意文字标题
- private lazy var agreeLabel : UILabel = JYUIModel.creatLabe(text: "我已认真阅读并同意", font: UIFont.systemFont(ofSize: 16), textColor: UIColor.red, textAlignment: NSTextAlignment.center)
- /// 完成按钮
- private lazy var completeBtn : UIButton = {
- let btn = JYUIModel.createBtn()
- btn.titleLabel?.font = UIFont.systemFont(ofSize: 30)
- btn.layer.cornerRadius = 25
- btn.layer.masksToBounds = true
- btn.backgroundColor = UIColor.purple
- btn.setTitle("完成注册", for: UIControl.State.normal)
- btn.setTitleColor(UIColor.red, for: UIControl.State.normal)
- btn.setTitle("完成注册", for: UIControl.State.selected)
- btn.setTitleColor(UIColor.green, for: UIControl.State.selected)
- btn.addTarget(self, action: #selector(clickcompleteBtn), for: UIControl.Event.touchUpInside)
- return btn
- }()
- override init(frame: CGRect) {
- super.init(frame: frame)
- configUI()
- }
- required init?(coder aDecoder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- //点击背景view 移除当前控件
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
- if let touch = touches.first {
- var point = touch.location(in: self)
- point = bgView.layer.convert(point, from: self.layer)
- if !bgView.layer.contains(point){
- self.removeView()
- }
- }
- }
- /// 移除弹框(内部移除)
- private func removeView() {
- UIView.animate(withDuration: 0.5, animations: { [weak self] in
- self?.alpha = 0
- }) { [weak self] (res) in
- self?.removeFromSuperview()
- }
- }
- /// 初始化欢迎弹框
- convenience init(titleText:String? = nil,
- subtitle: String? = nil ,
- agree:String? = nil,
- buttonText: String? = nil) {
- self.init()
- if agree != nil {
- self.titleLabel.text = titleText
- }
- if agree != nil {
- self.agreeLabel.text = agree
- }
- if subtitle != nil{
- self.subtitleLabel.text = subtitle
- }
- if buttonText != nil{
- self.completeBtn.setTitle(buttonText, for: .normal)
- }
- }
- /// 显示弹框
- func showAlert(selectedBtnBlock:((_ isSelected:Bool) -> Void)? , completeBtnBlock:(() -> Void)?) {
- JYWindow.subviews.forEach { (v) in
- if v is JYRegisterProtocolView {
- return
- }
- }
- JYWindow.addSubview(self)
- self.clickSelectedBtnBlock = selectedBtnBlock
- self.clickCompleteBtnBlock = completeBtnBlock
- self.alpha = 0
- self.isUserInteractionEnabled = false
- UIView.animate(withDuration: 0.5) {
- self.alpha = 1
- self.isUserInteractionEnabled = true
- }
- }
- }
- // MARK: - 点击事件
- extension JYRegisterProtocolView{
- /// 点击阅读
- @objc private func clickSelectedBtn(){
- selectedBtn.isSelected.toggle()
- if selectedBtn.isSelected == true {
- selectedBtn.backgroundColor = UIColor.black
- }else{
- selectedBtn.backgroundColor = UIColor.orange
- }
- clickSelectedBtnBlock?(selectedBtn.isSelected)
- }
- /// 点击完成注册
- @objc private func clickcompleteBtn(){
- if selectedBtn.isSelected == false{
- DDLOG(message: "给个提示")
- }else{
- clickCompleteBtnBlock?()
- self.removeView()
- }
- }
- }
- // MARK: - UI
- extension JYRegisterProtocolView{
- func configUI(){
- self.backgroundColor = "000000".jy.getColor().withAlphaComponent(0.3)
- self.frame = UIScreen.main.bounds
- self.layoutIfNeeded()
- configBgView()
- let vd : [String:UIView] = ["bgView":bgView]
- addSubview(bgView)
- self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-24-[bgView]-24-|", options: [], metrics: nil, views: vd))
- self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[bgView]", options: [], metrics: nil, views: vd))
- bgView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
- bgView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
- addSubview(bgView)
- }
- /// 背景view的UI
- func configBgView(){
- let vd : [String : UIView] = ["titleLabel":titleLabel,
- "subtitleLabel":subtitleLabel,
- "selectedBtn":selectedBtn,
- "agreeLabel":agreeLabel,
- "completeBtn":completeBtn]
- bgView.addSubview(titleLabel)
- bgView.addSubview(subtitleLabel)
- bgView.addSubview(selectedBtn)
- bgView.addSubview(agreeLabel)
- bgView.addSubview(completeBtn)
- bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|[titleLabel]|", options: [], metrics: nil, views: vd))
- bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-15-[subtitleLabel]-15-|", options: [], metrics: nil, views: vd))
- bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "[selectedBtn(20)]-10-[agreeLabel]", options: [.alignAllCenterY], metrics: nil, views: vd))
- bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-50-[completeBtn]-50-|", options: [], metrics: nil, views: vd))
- bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-15-[titleLabel]-10-[subtitleLabel]-30-[agreeLabel]-20-[completeBtn(50)]-20-|", options: [.alignAllCenterX], metrics: nil, views: vd))
- selectedBtn.heightAnchor.constraint(equalToConstant: 20).isActive = true
- }
- }
swift4.2 - 一个自定义view弹框的更多相关文章
- CodePush自定义更新弹框及下载进度条
CodePush 热更新之自定义更新弹框及下载进度 先来几张弹框效果图 非强制更新场景 image 强制更新场景 image 更新包下载进度效果 image 核心代码 这里的热更新Modal框,是封装 ...
- 使用xib封装一个自定义view的步骤
使用xib封装一个自定义view的步骤 1> 新建一个继承UIView的自定义view,假设类名叫做(MJAppView) 2> 新建一个MJAppView.xib文件来描述MJAppVi ...
- JavaScript实现自定义alert弹框
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAAFkCAYAAACEpYlzAAAfj0lEQVR4nO3dC5BddZ0n8F93pxOQCO
- 自定义 popWindow弹框 工具包
前言:因为Android 没有像IOS一样的ActionSheet,虽然在github上看到有一些类似ActionSheet的库,总觉得不好用,不如自己写一个弹框通用类,样式全部自已来多好. Step ...
- vue中超简单的方法实现点击一个按钮出现弹框,点击弹框外关闭弹框
效果图展示: View层 <template> <div> <div class="mask" v-if="showModal" ...
- 如何优雅的写一个Vue 的弹框
写Vue或者是react 都会遇见弹框的问题.也尝试了多种办法来写弹框,一直都不太满意,今天特地看了一下 Element UI 的源码,模仿着写了一个简易版. 大概有一下几个问题: 1.弹框的层级问题 ...
- 自定义alert弹框,title不显示域名
问题: 系统默认的alert弹框的title会默认显示网页域名 解决办法: (修改弹框样式) (function() { window.alert = function(name) { $(" ...
- 自定义alert弹框,title不显示域名(重写alert)
问题: 系统默认的alert弹框的title会默认显示网页域名 解决办法: (修改弹框样式) (function() { window.alert = function(name) { $(" ...
- IOS中使用.xib文件封装一个自定义View
1.新建一个继承UIView的自定义view,假设类名叫做 MyAppVew #import <UIKit/UIKit.h> @class MyApp; @interface MyAppV ...
随机推荐
- JVM 学习集合
内存回收要做的事: 确定哪些内存需要回收,确定什么时候需要执行GC,如何执行GC 以最简单的本地变量引用:Object obj = new Object()为例: Object obj表示一个本地引用 ...
- js 编写一个神奇的四则运算
写一个算法,有时候可以用简单的方法就可以写出来,但是只能针对特定的环境,如果要能够适应不同的环境,就需要对算法进行优化,在优化的过程中,你会觉得非常神奇,下面来看一个简单的四则运算的算法编写方式: 1 ...
- 使用jsoup爬取所有成语
前几天看到有人在博问上求所有成语,想到刚好看了jsoup,就动手实践了一下,提问者给出了网站,一看很简单,就两种页面,一种是包含某个字的成语链接页面,一个是具体的包含某个字的成语的页面 下面是我的代码 ...
- 模糊查询内存查询java实现
下面说说看到的工作项目中的代码,是这个样子的,事先查询一次数据库,将查询到的整张表的数据存到内存,以后使用时不再查询数据库,而直接操作内存中的数据,这主要用于数据库中的数据比较稳定,不会轻易改变的情况 ...
- SED命令用法整理
sed '/Started/'q 匹配到Started字符串则退出sed命令 sed '/Started/{/in/q}' 同时匹配到Started和in两个字符时则退出sed命令 ------- ...
- 1.Tomcat配置.md
1.启动 解压缩安装包后,点击startup.bat,保持控制台窗口开启 浏览器中输入http://localhost:8080 后看到启动界面则表示启动成功 点击shutdown.bat则关闭Tom ...
- 25.week4 docker build 也就是创建自己的image 上传image到dockerhub 从dockerhub下载images
dado可以写你自己的名字 这个命令就会根据目录下的Dockerfile(固定用和这个名字)文件里面的内容 去下载并创建运行命令一步一步地 Setting up libxfixes3:amd64 (: ...
- CAP与Base理论
分布一致性的提出 在分布式系统中要解决的一个重要问题就是数据的复制.在我们的日常开发经验中,相信很多开发人员都遇到过这样的问题:假设客户端C1将系统中的一个值K由V1更新为V2,但客户端C2无法立即读 ...
- 搭建GitLab+Jenkins
1. Jenkins and GitLab Jenkins是一个自动化服务器,可以运行各种自动化构建.测试或部署任务. GitLab是一个代码仓库,用来管理代码. 两者结合起来,就可以实现开发者提交代 ...
- nbtscan工具
这是一款用于扫描Windows网络上NetBIOS名字信息的程序.该程序对给出范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,NBTScan列出它的 ...