iOS气泡提示工具BubblePopup的使用

这篇具有很好参考价值的文章主要介绍了iOS气泡提示工具BubblePopup的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 
在平时的开发中,通常新手引导页或功能提示页会出现气泡弹窗来做提示。如果遇到了这类功能通常需要花费一定的精力来写这么一个工具的,这里写了一个气泡弹窗工具,希望能帮你提升一些开发效率。
 
使用方法
1.从gitHub上下载代码到本地,代码地址:https://github.com/zhfei/BubblePopup
2.调用BubblePopupManager文件内的单例方法,在指定的页面上添加气泡提示。
普通文本气泡弹窗使用方式如下:
BubblePopupManager.shared.addPopup(toView: self.view, tips: "冒泡弹窗", popupType: .dotLine, positionType: .bottom, popupPoint: nil, linkPoint: CGPoint(x: sender.frame.midX, y: sender.frame.minY), maxWidth: 200.0)
自定义View气泡弹窗使用方式如下:
BubblePopupManager.shared.addPopup(toView: self.view, customContentView: MyContentView(), popupType: .triangle, positionType: .bottom, popupPoint: CGPoint(x: sender.frame.midX, y: sender.frame.minY), linkPoint: nil, maxWidth: 200.0)
 注意:自定义内容View只能使用frame布局,不能使用约束。
 
设计模式
气泡弹窗View的结构设计采用的设计模式为组合模式
把气泡弹窗分为3个部分:气泡背景,气泡指示器,气泡提示内容。
在创建气泡弹窗时,根据子类的自定义实现,将这三部分分别创建并组装到一起。实现了功能的灵活插拔和自定义扩展。
iOS气泡提示工具BubblePopup的使用

气泡弹窗生成算法采用的设计模式为模版方法模式
在气泡构建基类中设置好气泡的构建步骤,把必要的部分或者提供默认实现的部分在父类中提供默认的实现,对其他需要自定义实现的部分,只在父类中写了一个抽象方法,具体实现交给子类自己实现。
虚线气泡弹窗类图
iOS气泡提示工具BubblePopup的使用

三角形气泡弹窗类图

iOS气泡提示工具BubblePopup的使用

 
核心实现
BubblePopupManager: 使用气泡弹窗工具的入口,通过它创建并添加一个气泡弹窗到指定的View上。
BubblePopupBuilder: 气泡弹窗构建者基类,使用模版方法模式定义了气泡的构建流程,子类可以自定义各自的实现。
DotLineBubblePopupBuilder:虚线气泡弹窗基类,它是基类BubblePopupBuilder的子类,内部包含了虚线气泡弹窗生成时所需要的工具方法和必要属性,方便创建top,bottom,left,right虚线气泡弹窗。
TriangleBubblePopupBuilder :三角形气泡弹窗基类,它是BubblePopupBuilder的子类,内部包含了三角形气泡弹窗生成时所需要的工具方法和必要属性,方便创建top,bottom,left,right三角形气泡弹窗
BubblePopup:气泡弹窗View,它内部使用组合模式将子部件组合起来,组成了一个气泡弹窗。
BubbleViewFactory: 气泡弹窗子视图创建工程,用于创建气泡弹窗所需要的子视图,并将各个子视图组装成一个最终的气泡弹窗。

BubblePopupBuilder
BubblePopupBuilder是所有气泡弹窗的公共基类,对于里面定义的属性和方法的功能分别为
属性:属性里保存的是气泡弹窗公共的,必要的数据。
方法:在基类提供的方法中主要用于定义气泡的构建流程。
核心方法如下:
func setupUI() {
    addBubbleContentView(to: bubblePopup)
    addBubbleBGView(to: bubblePopup)
    updateLayout(to: bubblePopup)
    addBubbleFlagView(to: bubblePopup)
}
其中气泡内容展示视图和气泡背景视图有默认实现,子类可以直接使用默认样式。
而气泡标识View和气泡布局方法则需要子类自己实现,因为不同类型的气泡弹窗它们的气泡标识设布局方式是不一样的。

DotLineBubblePopupBuilder
虚线气泡基类DotLineBubblePopupBuilder,它继承自BubblePopupBuilder
属性:增加了虚线弹窗必要的linkPoint属性,即:虚线与气泡弹窗的连接点。
增加了一个坐标系转换懒加载属性,用于将用户设置的屏幕坐标点转成气泡内部的视图坐标系中的点。
重要方法说明:
getDrawDotLineLayerRectParams
用于虚线图层绘制:获取虚线绘制时所需要的绘制元素坐标,如:虚线的开始,结束坐标,连接点圆的直径等。
getDotLineLayerContainerViewFrame
更新虚线容器View的位置大小信息:获取不同情况下的虚线容器Frame。
layoutDotLineBubblePopupView
更新虚线气泡弹窗的frame。
updateBGBubbleViewFrame
更新气泡背景的frame。

这里提供的方法属于工具方法,子类可以通过传递自己的类型来得到对应的结果。这里按道理可以使用设计模式中策略模式来对算法进行封装,如:在基类定义一个抽象方法,将上面则4个工具方法分拆到各自的子类中,让子类在对应的自己的类中实现这个方法。
这里没有这样做原因是:这些方法在子类中的实现代码并不复杂,用一个方法根据条件集中返回是比较方便的,而分拆到不同类中反而很麻烦。所以选择在基类中以方法工具的形式统一放置了。

DotLineTopBubblePopupBuilder
top型虚线气泡弹窗DotLineTopBubblePopupBuilder,它继承自DotLineBubblePopupBuilder,属于一直具体的弹窗类型。
它里面只对下面两个方法进行了重写,根据自己的类型进行子类个性化实现。
override func updateLayout
override func addBubbleFlagView

具体实现如下:

class DotLineTopBubblePopupBuilder: DotLineBubblePopupBuilder {
    
    override func updateLayout(to bubblePopup: BubblePopup) {
        layoutDotLineBubblePopupView(bubblePopup: bubblePopup, positionType: .top)
    }
    
    override func addBubbleFlagView(to bubblePopup: BubblePopup) {
        assert(!self.targetPoint.equalTo(.zero), "气泡提示点无效")
        
        let flagFrame = getDotLineLayerContainerViewFrame(position: .top, targetPoint: self.targetPoint)
        let params = getDrawDotLineLayerRectParams(position: .top)
        let flagBubbleView = BubbleViewFactory.generateDotLineBubbleFlagView(flagFrame: flagFrame, position: .top, params: params)
        bubblePopup.bubbleFlagView = flagBubbleView
        bubblePopup.addSubview(flagBubbleView)
    }
    
}
其他bottom, left, right类型相似。

TriangleBubblePopupBuilder
三角形气泡基类TriangleBubblePopupBuilder,它继承自BubblePopupBuilder 
属性:相对于基类增加了popupPoint属性,它是三角形顶点指向的坐标点
增加了一个坐标系转换懒加载属性,用于将用户设置的屏幕坐标点转成气泡内部的视图坐标系中的点。
重要方法说明:
getDrawTriangleLayeyRectParams
为三角形图层绘制提供不同气泡类型所需要的绘制元素坐标,如:三角形的三个顶点。
getTriangleLayerContainerViewFrame
获取不同情况下三角形图层容器的Frame,用于更新三角形图层容器View的位置大小。
layoutTriangleBubblePopupView
更新三角形气泡弹窗的frame。
updateTriangleBGBubbleView
更新气泡背景的frame。

三角形弹窗基类TriangleBubblePopupBuilder的设计方式和虚线弹窗基类是一样的。
这里的方法属于工具方法,子类可以通过传递自己的类型来得到对应的结果,通过牺牲一点开发模式的规范化来换取开发效率的提升。
在三角形气泡基类的下面同样有4个子类top,bottom,left ,right进行各种的自定义实现。

TriangleTopBubblePopupBuilder
top型三角形气泡弹窗DotLineTopBubblePopupBuilder,它继承自DotLineBubblePopupBuilder,属于一直具体的弹窗类型。

它里面只对下面这两个方法做了重写,根据自己的类型进行子类个性化实现。
override func updateLayout
override func addBubbleFlagView
具体实现如下:
class TriangleTopBubblePopupBuilder: TriangleBubblePopupBuilder {
    override func updateLayout(to bubblePopup: BubblePopup) {
        layoutTriangleBubblePopupView(bubblePopup: bubblePopup, positionType: .top)
    }
    override func addBubbleFlagView(to bubblePopup: BubblePopup) {
        assert(!self.targetPoint.equalTo(.zero), "气泡提示点无效")
        
        let flagFrame = getTriangleLayerContainerViewFrame(position: .top, targetPoint: self.targetPoint)
        let params = getDrawTriangleLayeyRectParams(position: .top)
        let flagBubbleView = BubbleViewFactory.generateTriangleBubbleFlagView(flagFrame: flagFrame, position: .top, params: params)
        bubblePopup.bubbleFlagView = flagBubbleView
        bubblePopup.addSubview(flagBubbleView)
    }
}
其他bottom, left, right类型相似。
 
弹窗效果展示
三角形气泡弹窗
 iOS气泡提示工具BubblePopup的使用

虚线气泡弹窗
iOS气泡提示工具BubblePopup的使用

自定义气泡弹窗

iOS气泡提示工具BubblePopup的使用

 文章来源地址https://www.toymoban.com/news/detail-476796.html

 

 

到了这里,关于iOS气泡提示工具BubblePopup的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flutter开发实战-flutter实现类似iOS的Alert提示框与sheet菜单效果

    flutter开发实战-flutter实现类似iOS的Alert提示框与sheet菜单效果 在开发过程中,经常使用到提示框Dialog,与sheet,使用到了flutter的showDialog与showModalBottomSheet 我这里类似alert弹窗直接调用 flutter 中提供的showDialog()函数显示对话框。 我这里类似Sheet底部弹窗调用 flutter 中提供的show

    2024年02月16日
    浏览(36)
  • iOS开发Swift-7-得分,问题序号,约束对象,提示框,类方法与静态方法-趣味问答App

    1.根据用户回答计算得分  ViewController.swift: 2.显示题目序号  ViewController.swift: 3.为屏幕进度条更改约束 将1:13的宽度约束拖入ViewController。  因为progressBarView是只读,所以要根据屏幕宽度计算出1/13的宽度,然后加到Constant中。  ViewController.swift:  4.制作弹窗 https://github.com/rel

    2024年02月10日
    浏览(49)
  • 平时很少使用的c和c++语法逻辑

    1. goto语句 example: #includestdio.h #includestdlib.h int main(){ string hello=\\\"\\\"; string world=\\\"\\\"; while(cinhello){         goto Tiaoshu; } Tiaoshu:         cout\\\"hellow world!\\\"endl; return 0; } 2. break 和continue #includestdio.h #includestdlib.h int main(){         int a=0; while(cina){ swtch(a){         case 常量表达式0:      

    2024年02月02日
    浏览(43)
  • mac电脑 安装 ios开发工具xcode步骤 以及新建ios项目

            在Mac电脑上安装Xcode,苹果公司的官方iOS开发工具,以及新建iOS项目,以下是详细步骤:         安装Xcode 1. 打开Mac上的App Store。 2. 在搜索栏中输入“Xcode”。 3. 从搜索结果中找到Xcode,点击“获取”按钮。 4. 输入您的Apple ID和密码,然后点击“安装”按钮。

    2024年02月20日
    浏览(46)
  • 基于 OpenCV 开发实现自动读取气泡测试表并对其进行评分

    文末提供免费的源代码下载链接 为了构建项目,我们需要遵循的步骤是: 找出图像中的轮廓。 使用文档的轮廓获取文档的自上而下视图。 找到文档上两个最大的轮廓。 遮盖文档中除最大轮廓区域之外的所有内容。 分割最大轮廓的区域以获得框中的每个 答案 。 仔细检查每

    2024年02月12日
    浏览(43)
  • 分享我平时使用的几款免费的 AI 文字生成图片的在线网站

    现在网络上有很多基于文字生成图片的工具,相信大家日常生活中也经常在使用了。 比如百度的文心一言: 可惜文心一言生成的图片尺寸比较小,而且包含水印。 经过测试发现,文心一言文生图,似乎不支持英文字符? 而且我没找到让生成的图片不包含水印的方法: 我儿

    2024年02月01日
    浏览(91)
  • ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

    很多会员在上传小程序前端时经常出现首页无法打开的情况,错误提示无法打开该页面,不支持打开,这种问题其实就是权限问题,页面是通过调用web-view访问,说明业务域名有问题,很多都是合法域名加了,但忘了加业务域名导致。 小程序后台小程序类目选择:工具 - 办公

    2024年02月16日
    浏览(56)
  • 测试篇(四):测试用例的分类、按测试对象划分、按是否查看代码划分、你平时哪种测试方法用的多?、按照开发阶段划分

    界面测试简称UI测试,指按照测面的需求(一般是UI设计稿),和界面设计规则,对我们软件界面所展示的全部内容进行测试和检查,一般包括如下内容: 验证界面内容显示的完整性,一致性,准确性,友好性。比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示;

    2024年02月03日
    浏览(62)
  • RK3399平台开发系列讲解(内核调试篇)IO 数据工具:iostat和iotop

    🚀 返回专栏总目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 在 Linux 系统上, iostat 和 iotop 这两个 IO 数据工具非常常用。它们都是性能分析领域中不可缺少的工具性软件。 iostat 命令,是用来展示系统中的 IO 设备和 CPU 使用情况的。它的最大优势在于能汇报

    2024年02月09日
    浏览(35)
  • ios 配置了代理且使用 chls.pro/ssl 下载不了证书,无法弹出下载证书的提示

    在使用ios 连接charles时遇到一个问题~ 配置代理且使用 chls.pro/ssl 下载不了证书,浏览器不弹下载证书的提示 1、下载证书 使用默认浏览器打开这个链接:https://www.charlesproxy.com/assets/legacy-ssl/charles.crt 直接下载证书。注:使用数据流量打开该链接 点允许后,会下载证书 2、安装

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包