開源專案:MMPopupView

發表於2015-10-08

前言


彈出框元件應該是絕大多數應用都少不了的(只有極少數精心設計的APP會用不到) 當然我們的APP也不例外 之前我們APP的彈出框元件是我用pop寫的 可是後來發現與系統原生動畫有些衝突(pop內部用到了CATransaction 導致跟系統動畫同時發生時會有問題) 所以上週花了大半天時間重寫了一下MMPopupView這個元件

因為新寫的元件完全是用Masonry寫的 我覺得是個非常好的示例教程 結合之前我寫的Masonry入門教程 應該可以更好的理解和運用Masonry/Autolayout 所以我又花了一點時間重新整理成了一個簡單的開源庫 有興趣的朋友可以研究一下

執行的demo可以在這裡檢視

介紹


整體的組成大概就是這個樣子

MMPopupWindow就是用來顯示所有彈出框的容器 相對直接顯示在當前UIWindow上來說 弄個獨立的Window出來當容器的會更好

MMPopupView就是彈出框的基類 所有的彈出框只要繼承自這個類 就具備了顯示的能力 使用者只要關注於彈出框本身的表現就行了

MMAlertViewMMSheetView都是我提供的基於MMPopupView的簡單元件 可以直接拿來用 而且都是高度可定製的(這個稍後會介紹)

MMPopupWindow

MMPopupWindow的定義如下

很簡單 只有一個屬性touchWildToHide用來控制是否可以點選非彈出框的地方來使彈出框消失 還有一個cacheWindow的方法來預載入MMPopupWindow 防止第一次使用的時候頓卡

另外還有兩個用於顯示和隱藏背景色的方法 這個在自定義動畫的時候會用到

MMPopupView

MMPopupView的定義如下

使用起來很簡單 定義好自己的view 然後呼叫下面的方法就好了

你也可以指定顯示在某個UIView之上

預設提供了三種型別 對應三種動畫效果

當然你也可以自己定義想要的動畫效果 只要過載下面兩個block就行了

同時提供了動畫的回撥 可以直接指定block或者直接呼叫方法

MMAlertView

MMAlertView就是UIAlertView的替代品 介面如下

分別對應下面三種形式

同時提供一個全域性的配置類 可以充分的自定義

MMSheetView

MMSheetView就是UISheetView的替代品 介面如下

同時提供一個全域性的配置類 可以充分的自定義

MMPopupItem

MMPopupItem是用於MMAlertViewMMSheetView的動作物件(對應按鈕) 定義如下

使用方式如下

自定義


除了使用MMAlertViewMMSheetView之外 比如我們的應用中會用到輸入驗證碼的提示框和日期的選擇框 都可以用MMPopupView來輕鬆實現

小結


原始碼和Demo請點這裡

更多的細節歡迎執行demo 或者檢視原始碼 有任何問題歡迎提出來大家一起討論研究 :)