前言 “千淘萬漉雖辛苦,吹盡狂沙始到金!痹谶@快速變化的互聯(lián)網行業(yè),身邊的朋友有的選擇了勇敢創(chuàng)業(yè),有的則在技術的海洋中默默耕耘。時常在深夜反思,作為一個開發(fā)者,我們的價值何在?答案或許就在那行代碼中,潤物細無聲。以下是我在日常開發(fā)中封裝的一個彈窗管理工具——CLPopoverManager,希望能為
“千淘萬漉雖辛苦,吹盡狂沙始到金!痹谶@快速變化的互聯(lián)網行業(yè),身邊的朋友有的選擇了勇敢創(chuàng)業(yè),有的則在技術的海洋中默默耕耘。時常在深夜反思,作為一個開發(fā)者,我們的價值何在?答案或許就在那行代碼中,潤物細無聲。以下是我在日常開發(fā)中封裝的一個彈窗管理工具——CLPopoverManager,希望能為大家提供一些靈感和幫助。
在移動應用開發(fā)中,彈窗作為一種重要的用戶交互方式,使用頻率非常高。無論是提示信息、廣告展示,還是操作確認,彈窗都扮演著重要角色。然而,如果彈窗的顯示邏輯缺乏合理控制,可能會出現(xiàn)彈窗重疊、順序混亂等問題,極大影響用戶體驗。因此,我開發(fā)了CLPopoverManager,旨在為彈窗顯示提供一個統(tǒng)一、可控的管理方案。
CLPopoverManager具有多種功能,包括支持排隊、插隊、替換、唯一模式,支持優(yōu)先級設置、去重標記、手勢穿透、自動隱藏、自動旋轉、隱藏狀態(tài)欄、狀態(tài)欄樣式、設置界面方向和夜間模式等。
彈窗采用偽單例模式管理UIWindow,內部采用自定義隊列控制顯示順序,對外使用UIViewController。
自定義UIViewController繼承CLPopoverController并且遵守CLPopoverProtocol協(xié)議即可,內部可以自行實現(xiàn)彈窗相關動畫和UI。
示例代碼:
class CustomPopoverController: CLPopoverController, CLPopoverProtocol {
// 實現(xià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)先級設置對進入等待隊列中的彈窗生效,高優(yōu)先級的彈窗將優(yōu)先顯示。
常見問題解答(QA):
為什么使用UIViewController而不是UIView?UIViewController相比UIView能夠提供生命周期相關方法,管理起來更加方便。
為什么使用UIWindow?UIWindow可以不入侵項目UI,保障不擾亂當前項目的同時,可以實現(xiàn)橫豎屏切換、狀態(tài)欄樣式等。
為什么是偽單例模式?彈窗管理在所有彈窗都銷毀后,會自動銷毀管理者的單例。
為什么有優(yōu)先級的情況還需要這么多模式?需求多種多樣,為保障靈活性的同時,還能夠保障彈窗的順序。
通過封裝CLPopoverManager,我們能夠更好地管理iOS應用中的彈窗顯示邏輯,提升用戶體驗,保障應用的穩(wěn)定性。希望這個工具能夠幫助到大家,同時也歡迎各位提出寶貴的意見和建議。
開發(fā)是一種藝術,不僅需要技術的積累,更需要靈感和創(chuàng)造力。愿我們在追求技術之巔的路上,能夠彼此激勵,共同成長。愿所有的開發(fā)者都能在自己的代碼世界中找到那一片屬于自己的凈土。
PS :心中感慨良多,奈何腹中無墨,一個字總結——懶。順便附上github,有興趣的可以去看看。
小編推薦閱讀