前言 “千淘萬漉雖辛苦,吹盡狂沙始到金。”在這快速變化的互聯(lián)網(wǎng)行業(yè),身邊的朋友有的選擇了勇敢創(chuàng)業(yè),有的則在技術(shù)的海洋中默默耕耘。時常在深夜反思,作為一個開發(fā)者,我們的價值何在?答案或許就在那行代碼中,潤物細(xì)無聲。以下是我在日常開發(fā)中封裝的一個彈窗管理工具——CLPopoverManager,希望能為
“千淘萬漉雖辛苦,吹盡狂沙始到金!痹谶@快速變化的互聯(lián)網(wǎng)行業(yè),身邊的朋友有的選擇了勇敢創(chuàng)業(yè),有的則在技術(shù)的海洋中默默耕耘。時常在深夜反思,作為一個開發(fā)者,我們的價值何在?答案或許就在那行代碼中,潤物細(xì)無聲。以下是我在日常開發(fā)中封裝的一個彈窗管理工具——CLPopoverManager,希望能為大家提供一些靈感和幫助。
在移動應(yīng)用開發(fā)中,彈窗作為一種重要的用戶交互方式,使用頻率非常高。無論是提示信息、廣告展示,還是操作確認(rèn),彈窗都扮演著重要角色。然而,如果彈窗的顯示邏輯缺乏合理控制,可能會出現(xiàn)彈窗重疊、順序混亂等問題,極大影響用戶體驗。因此,我開發(fā)了CLPopoverManager,旨在為彈窗顯示提供一個統(tǒng)一、可控的管理方案。
CLPopoverManager具有多種功能,包括支持排隊、插隊、替換、唯一模式,支持優(yōu)先級設(shè)置、去重標(biāo)記、手勢穿透、自動隱藏、自動旋轉(zhuǎn)、隱藏狀態(tài)欄、狀態(tài)欄樣式、設(shè)置界面方向和夜間模式等。
彈窗采用偽單例模式管理UIWindow,內(nèi)部采用自定義隊列控制顯示順序,對外使用UIViewController。
自定義UIViewController繼承CLPopoverController并且遵守CLPopoverProtocol協(xié)議即可,內(nèi)部可以自行實現(xiàn)彈窗相關(guān)動畫和UI。
示例代碼:
class CustomPopoverController: CLPopoverController, CLPopoverProtocol {
// 實現(xiàn)彈窗相關(guān)邏輯
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
private func setupUI() {
// 配置彈窗UI
}
func showAnimation(completion: (() -> Void)? = nil) {
// 顯示動畫
}
func dismissAnimation(completion: (() -> Void)? = nil) {
// 隱藏動畫
}
}
/// 彈出
let popover = CustomPopoverController()
popover.config.popoverMode = .queue
let key = CLPopoverManager.show(popover: popover)
/// 隱藏單個彈窗
CLPopoverManager.dismiss(key)
/// 隱藏所有彈窗
CLPopoverManager.dismissAll()
彈窗模式包括排隊模式、插隊模式、替換模式和唯一模式。優(yōu)先級設(shè)置對進(jìn)入等待隊列中的彈窗生效,高優(yōu)先級的彈窗將優(yōu)先顯示。
常見問題解答(QA):
為什么使用UIViewController而不是UIView?UIViewController相比UIView能夠提供生命周期相關(guān)方法,管理起來更加方便。
為什么使用UIWindow?UIWindow可以不入侵項目UI,保障不擾亂當(dāng)前項目的同時,可以實現(xiàn)橫豎屏切換、狀態(tài)欄樣式等。
為什么是偽單例模式?彈窗管理在所有彈窗都銷毀后,會自動銷毀管理者的單例。
為什么有優(yōu)先級的情況還需要這么多模式?需求多種多樣,為保障靈活性的同時,還能夠保障彈窗的順序。
通過封裝CLPopoverManager,我們能夠更好地管理iOS應(yīng)用中的彈窗顯示邏輯,提升用戶體驗,保障應(yīng)用的穩(wěn)定性。希望這個工具能夠幫助到大家,同時也歡迎各位提出寶貴的意見和建議。
開發(fā)是一種藝術(shù),不僅需要技術(shù)的積累,更需要靈感和創(chuàng)造力。愿我們在追求技術(shù)之巔的路上,能夠彼此激勵,共同成長。愿所有的開發(fā)者都能在自己的代碼世界中找到那一片屬于自己的凈土。
PS :心中感慨良多,奈何腹中無墨,一個字總結(jié)——懶。順便附上github,有興趣的可以去看看。
小編推薦閱讀count(*)、count(1)哪個更快?面試必問:通宵整理的十道經(jīng)典MySQL必問面試題
閱讀從需求分析、產(chǎn)品設(shè)計到部署交付各階段說明
閱讀如何利用七牛云進(jìn)行數(shù)據(jù)備份和刪除
閱讀強(qiáng)化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀OpenAI官方開源多智能體框架Swarm,社區(qū)反響熱烈
閱讀Vue-Vben-Admin:功能強(qiáng)大的Vue3后臺管理系統(tǒng)模板
閱讀深度解析Spring AI:請求與響應(yīng)機(jī)制的核心邏輯
閱讀.NET云原生應(yīng)用實踐(一):從搭建項目框架結(jié)構(gòu)開始
閱讀llama.cpp:一個適用于中小型研發(fā)企業(yè)的高性能CPU/GPU大語言模型推理框架
閱讀Windows應(yīng)急響應(yīng)-Auto病毒
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2024 haote.com 好特網(wǎng)