国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

iOS氣泡提示工具BubblePopup的使用

這篇具有很好參考價值的文章主要介紹了iOS氣泡提示工具BubblePopup的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?
在平時的開發(fā)中,通常新手引導(dǎo)頁或功能提示頁會出現(xiàn)氣泡彈窗來做提示。如果遇到了這類功能通常需要花費一定的精力來寫這么一個工具的,這里寫了一個氣泡彈窗工具,希望能幫你提升一些開發(fā)效率。
?
使用方法
1.從gitHub上下載代碼到本地,代碼地址:https://github.com/zhfei/BubblePopup
2.調(diào)用BubblePopupManager文件內(nèi)的單例方法,在指定的頁面上添加氣泡提示。
普通文本氣泡彈窗使用方式如下:
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)
?注意:自定義內(nèi)容View只能使用frame布局,不能使用約束。
?
設(shè)計模式
氣泡彈窗View的結(jié)構(gòu)設(shè)計采用的設(shè)計模式為組合模式
把氣泡彈窗分為3個部分:氣泡背景,氣泡指示器,氣泡提示內(nèi)容。
在創(chuàng)建氣泡彈窗時,根據(jù)子類的自定義實現(xiàn),將這三部分分別創(chuàng)建并組裝到一起。實現(xiàn)了功能的靈活插拔和自定義擴展。
iOS氣泡提示工具BubblePopup的使用

氣泡彈窗生成算法采用的設(shè)計模式為模版方法模式
在氣泡構(gòu)建基類中設(shè)置好氣泡的構(gòu)建步驟,把必要的部分或者提供默認(rèn)實現(xiàn)的部分在父類中提供默認(rèn)的實現(xiàn),對其他需要自定義實現(xiàn)的部分,只在父類中寫了一個抽象方法,具體實現(xiàn)交給子類自己實現(xiàn)。
虛線氣泡彈窗類圖
iOS氣泡提示工具BubblePopup的使用

三角形氣泡彈窗類圖

iOS氣泡提示工具BubblePopup的使用

?
核心實現(xiàn)
BubblePopupManager:?使用氣泡彈窗工具的入口,通過它創(chuàng)建并添加一個氣泡彈窗到指定的View上。
BubblePopupBuilder:?氣泡彈窗構(gòu)建者基類,使用模版方法模式定義了氣泡的構(gòu)建流程,子類可以自定義各自的實現(xiàn)。
DotLineBubblePopupBuilder:虛線氣泡彈窗基類,它是基類BubblePopupBuilder的子類,內(nèi)部包含了虛線氣泡彈窗生成時所需要的工具方法和必要屬性,方便創(chuàng)建top,bottom,left,right虛線氣泡彈窗。
TriangleBubblePopupBuilder :三角形氣泡彈窗基類,它是BubblePopupBuilder的子類,內(nèi)部包含了三角形氣泡彈窗生成時所需要的工具方法和必要屬性,方便創(chuàng)建top,bottom,left,right三角形氣泡彈窗
BubblePopup:氣泡彈窗View,它內(nèi)部使用組合模式將子部件組合起來,組成了一個氣泡彈窗。
BubbleViewFactory:?氣泡彈窗子視圖創(chuàng)建工程,用于創(chuàng)建氣泡彈窗所需要的子視圖,并將各個子視圖組裝成一個最終的氣泡彈窗。

BubblePopupBuilder
BubblePopupBuilder是所有氣泡彈窗的公共基類,對于里面定義的屬性和方法的功能分別為
屬性:屬性里保存的是氣泡彈窗公共的,必要的數(shù)據(jù)。
方法:在基類提供的方法中主要用于定義氣泡的構(gòu)建流程。
核心方法如下:
func setupUI() {
    addBubbleContentView(to: bubblePopup)
    addBubbleBGView(to: bubblePopup)
    updateLayout(to: bubblePopup)
    addBubbleFlagView(to: bubblePopup)
}
其中氣泡內(nèi)容展示視圖和氣泡背景視圖有默認(rèn)實現(xiàn),子類可以直接使用默認(rèn)樣式。
而氣泡標(biāo)識View和氣泡布局方法則需要子類自己實現(xiàn),因為不同類型的氣泡彈窗它們的氣泡標(biāo)識設(shè)布局方式是不一樣的。

DotLineBubblePopupBuilder
虛線氣泡基類DotLineBubblePopupBuilder,它繼承自BubblePopupBuilder
屬性:增加了虛線彈窗必要的linkPoint屬性,即:虛線與氣泡彈窗的連接點。
增加了一個坐標(biāo)系轉(zhuǎn)換懶加載屬性,用于將用戶設(shè)置的屏幕坐標(biāo)點轉(zhuǎn)成氣泡內(nèi)部的視圖坐標(biāo)系中的點。
重要方法說明:
getDrawDotLineLayerRectParams
用于虛線圖層繪制:獲取虛線繪制時所需要的繪制元素坐標(biāo),如:虛線的開始,結(jié)束坐標(biāo),連接點圓的直徑等。
getDotLineLayerContainerViewFrame
更新虛線容器View的位置大小信息:獲取不同情況下的虛線容器Frame。
layoutDotLineBubblePopupView
更新虛線氣泡彈窗的frame。
updateBGBubbleViewFrame
更新氣泡背景的frame。

這里提供的方法屬于工具方法,子類可以通過傳遞自己的類型來得到對應(yīng)的結(jié)果。這里按道理可以使用設(shè)計模式中策略模式來對算法進行封裝,如:在基類定義一個抽象方法,將上面則4個工具方法分拆到各自的子類中,讓子類在對應(yīng)的自己的類中實現(xiàn)這個方法。
這里沒有這樣做原因是:這些方法在子類中的實現(xiàn)代碼并不復(fù)雜,用一個方法根據(jù)條件集中返回是比較方便的,而分拆到不同類中反而很麻煩。所以選擇在基類中以方法工具的形式統(tǒng)一放置了。

DotLineTopBubblePopupBuilder
top型虛線氣泡彈窗DotLineTopBubblePopupBuilder,它繼承自DotLineBubblePopupBuilder,屬于一直具體的彈窗類型。
它里面只對下面兩個方法進行了重寫,根據(jù)自己的類型進行子類個性化實現(xiàn)。
override func updateLayout
override func addBubbleFlagView

具體實現(xiàn)如下:

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屬性,它是三角形頂點指向的坐標(biāo)點
增加了一個坐標(biāo)系轉(zhuǎn)換懶加載屬性,用于將用戶設(shè)置的屏幕坐標(biāo)點轉(zhuǎn)成氣泡內(nèi)部的視圖坐標(biāo)系中的點。
重要方法說明:
getDrawTriangleLayeyRectParams
為三角形圖層繪制提供不同氣泡類型所需要的繪制元素坐標(biāo),如:三角形的三個頂點。
getTriangleLayerContainerViewFrame
獲取不同情況下三角形圖層容器的Frame,用于更新三角形圖層容器View的位置大小。
layoutTriangleBubblePopupView
更新三角形氣泡彈窗的frame。
updateTriangleBGBubbleView
更新氣泡背景的frame。

三角形彈窗基類TriangleBubblePopupBuilder的設(shè)計方式和虛線彈窗基類是一樣的。
這里的方法屬于工具方法,子類可以通過傳遞自己的類型來得到對應(yīng)的結(jié)果,通過犧牲一點開發(fā)模式的規(guī)范化來換取開發(fā)效率的提升。
在三角形氣泡基類的下面同樣有4個子類top,bottom,left ,right進行各種的自定義實現(xiàn)。

TriangleTopBubblePopupBuilder
top型三角形氣泡彈窗DotLineTopBubblePopupBuilder,它繼承自DotLineBubblePopupBuilder,屬于一直具體的彈窗類型。

它里面只對下面這兩個方法做了重寫,根據(jù)自己的類型進行子類個性化實現(xiàn)。
override func updateLayout
override func addBubbleFlagView
具體實現(xiàn)如下:
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的使用

?文章來源地址http://www.zghlxwxcb.cn/news/detail-476796.html

?

?

到了這里,關(guān)于iOS氣泡提示工具BubblePopup的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • flutter開發(fā)實戰(zhàn)-flutter實現(xiàn)類似iOS的Alert提示框與sheet菜單效果

    flutter開發(fā)實戰(zhàn)-flutter實現(xiàn)類似iOS的Alert提示框與sheet菜單效果

    flutter開發(fā)實戰(zhàn)-flutter實現(xiàn)類似iOS的Alert提示框與sheet菜單效果 在開發(fā)過程中,經(jīng)常使用到提示框Dialog,與sheet,使用到了flutter的showDialog與showModalBottomSheet 我這里類似alert彈窗直接調(diào)用 flutter 中提供的showDialog()函數(shù)顯示對話框。 我這里類似Sheet底部彈窗調(diào)用 flutter 中提供的show

    2024年02月16日
    瀏覽(23)
  • iOS開發(fā)Swift-7-得分,問題序號,約束對象,提示框,類方法與靜態(tài)方法-趣味問答App

    iOS開發(fā)Swift-7-得分,問題序號,約束對象,提示框,類方法與靜態(tài)方法-趣味問答App

    1.根據(jù)用戶回答計算得分 ?ViewController.swift: 2.顯示題目序號 ?ViewController.swift: 3.為屏幕進度條更改約束 將1:13的寬度約束拖入ViewController。 ?因為progressBarView是只讀,所以要根據(jù)屏幕寬度計算出1/13的寬度,然后加到Constant中。 ?ViewController.swift: ?4.制作彈窗 https://github.com/rel

    2024年02月10日
    瀏覽(37)
  • 平時很少使用的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日
    瀏覽(22)
  • mac電腦 安裝 ios開發(fā)工具xcode步驟 以及新建ios項目

    ????????在Mac電腦上安裝Xcode,蘋果公司的官方iOS開發(fā)工具,以及新建iOS項目,以下是詳細步驟: ????????安裝Xcode 1. 打開Mac上的App Store。 2. 在搜索欄中輸入“Xcode”。 3. 從搜索結(jié)果中找到Xcode,點擊“獲取”按鈕。 4. 輸入您的Apple ID和密碼,然后點擊“安裝”按鈕。

    2024年02月20日
    瀏覽(25)
  • 基于 OpenCV 開發(fā)實現(xiàn)自動讀取氣泡測試表并對其進行評分

    基于 OpenCV 開發(fā)實現(xiàn)自動讀取氣泡測試表并對其進行評分

    文末提供免費的源代碼下載鏈接 為了構(gòu)建項目,我們需要遵循的步驟是: 找出圖像中的輪廓。 使用文檔的輪廓獲取文檔的自上而下視圖。 找到文檔上兩個最大的輪廓。 遮蓋文檔中除最大輪廓區(qū)域之外的所有內(nèi)容。 分割最大輪廓的區(qū)域以獲得框中的每個 答案 。 仔細檢查每

    2024年02月12日
    瀏覽(21)
  • 分享我平時使用的幾款免費的 AI 文字生成圖片的在線網(wǎng)站

    分享我平時使用的幾款免費的 AI 文字生成圖片的在線網(wǎng)站

    現(xiàn)在網(wǎng)絡(luò)上有很多基于文字生成圖片的工具,相信大家日常生活中也經(jīng)常在使用了。 比如百度的文心一言: 可惜文心一言生成的圖片尺寸比較小,而且包含水印。 經(jīng)過測試發(fā)現(xiàn),文心一言文生圖,似乎不支持英文字符? 而且我沒找到讓生成的圖片不包含水印的方法: 我兒

    2024年02月01日
    瀏覽(23)
  • ChatGPT付費創(chuàng)作系統(tǒng)小程序端開發(fā)工具提示打開顯示無法打開頁面解決辦法

    ChatGPT付費創(chuàng)作系統(tǒng)小程序端開發(fā)工具提示打開顯示無法打開頁面解決辦法

    很多會員在上傳小程序前端時經(jīng)常出現(xiàn)首頁無法打開的情況,錯誤提示無法打開該頁面,不支持打開,這種問題其實就是權(quán)限問題,頁面是通過調(diào)用web-view訪問,說明業(yè)務(wù)域名有問題,很多都是合法域名加了,但忘了加業(yè)務(wù)域名導(dǎo)致。 小程序后臺小程序類目選擇:工具 - 辦公

    2024年02月16日
    瀏覽(29)
  • 測試篇(四):測試用例的分類、按測試對象劃分、按是否查看代碼劃分、你平時哪種測試方法用的多?、按照開發(fā)階段劃分

    測試篇(四):測試用例的分類、按測試對象劃分、按是否查看代碼劃分、你平時哪種測試方法用的多?、按照開發(fā)階段劃分

    界面測試簡稱UI測試,指按照測面的需求(一般是UI設(shè)計稿),和界面設(shè)計規(guī)則,對我們軟件界面所展示的全部內(nèi)容進行測試和檢查,一般包括如下內(nèi)容: 驗證界面內(nèi)容顯示的完整性,一致性,準(zhǔn)確性,友好性。比如界面內(nèi)容對屏幕大小的自適應(yīng),換行,內(nèi)容是否全部清晰展示;

    2024年02月03日
    瀏覽(67)
  • RK3399平臺開發(fā)系列講解(內(nèi)核調(diào)試篇)IO 數(shù)據(jù)工具:iostat和iotop

    RK3399平臺開發(fā)系列講解(內(nèi)核調(diào)試篇)IO 數(shù)據(jù)工具:iostat和iotop

    ?? 返回專欄總目錄 沉淀、分享、成長,讓自己和他人都能有所收獲!?? ?? 在 Linux 系統(tǒng)上, iostat 和 iotop 這兩個 IO 數(shù)據(jù)工具非常常用。它們都是性能分析領(lǐng)域中不可缺少的工具性軟件。 iostat 命令,是用來展示系統(tǒng)中的 IO 設(shè)備和 CPU 使用情況的。它的最大優(yōu)勢在于能匯報

    2024年02月09日
    瀏覽(23)
  • ios 配置了代理且使用 chls.pro/ssl 下載不了證書,無法彈出下載證書的提示

    ios 配置了代理且使用 chls.pro/ssl 下載不了證書,無法彈出下載證書的提示

    在使用ios 連接charles時遇到一個問題~ 配置代理且使用 chls.pro/ssl 下載不了證書,瀏覽器不彈下載證書的提示 1、下載證書 使用默認(rèn)瀏覽器打開這個鏈接:https://www.charlesproxy.com/assets/legacy-ssl/charles.crt 直接下載證書。注:使用數(shù)據(jù)流量打開該鏈接 點允許后,會下載證書 2、安裝

    2024年02月12日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包