iOS開發 封裝一個可以複用的彈窗父類(TSActionAlertView)
阿新 • • 發佈:2019-02-14
1. 需求分析
功能需要: 在開發中我們總是遇到使用各種各樣的彈窗的情況,有的用作提示,有的用作功能,彈窗種類很多
他們的共同之處是:都有一個背景蒙層,都需要加一些動畫
但是它們用作展示的部分總是不盡相同:展示的樣式各異,很難統一
2. 功能需求
如果能有一個統一的,只需要寫子檢視,確定位置的父類
,其他的動畫,背景已經封裝好,那麼我們就可以只寫子控制元件和佈局,而不用管其他問題
3. 功能實現
所以我造了個輪子,把展示部分的作為containerview丟擲來,佈局和子檢視可以隨意新增,只需要繼承就好了
方便以後使用彈窗的時候可以快速的寫出來,不用考慮彈窗的動畫,彈窗的衝突等一系列問題,使用彈窗就像寫一個view一樣簡單.
效果圖(自己畫的介面..主要看效果,看效果):
4. 簡單介紹
- 2 種背景樣式
TSActionAlertViewBackgroundStyle | 說明 |
---|---|
TSActionAlertViewBackgroundStyleSolid | 背景半透明 |
TSActionAlertViewBackgroundStyleGradient | 背景漸變 |
- 5 種彈窗樣式
TSActionAlertViewTransitionStyle | 說明 |
---|---|
TSActionAlertViewTransitionStyleSlideFromBottom | 上來,然後下去 |
TSActionAlertViewTransitionStyleFade | 漸變 |
TSActionAlertViewTransitionStyleBounce | 彈出 |
TSActionAlertViewTransitionStyleDropDown | 下落 |
TSActionAlertViewTransitionStyleSlideFromTop | 下滑,然後上去 |
5. 怎麼用
用起來不要太簡單
1. 繼承 TSActionAlertView
2. 新增自定義控制元件,懶載入
3. 新增事件,寫好了兩個block在標頭檔案中,方便使用.不夠可以自己加
4. 繼承和使用方法
- (void)layoutContainerView{
//佈局containerview的位置,就是那個看得到的檢視
}
-(void)setupContainerViewAttributes{
//設定containerview的屬性,比 如切邊啥的
}
- (void)setupContainerSubViews{
//給containerview新增子檢視
}
- (void)layoutContainerViewSubViews{
//設定子檢視的frame
}
5.彈出
TSActionDemoView * demoAlertView = [TSActionDemoView actionAlertViewWithAnimationStyle:TSActionAlertViewTransitionStyleSlideFromTop];
[demoAlertView show];
6.消失
[demoAlertView dismissAnimated:YES];
6. 更多功能
你想知道什麼時候出現,消失?
添加了代理
- (void)actionAlertViewWillShow;//即將出現
- (void)actionAlertViewDidShow;//已經出現
- (void)actionAlertViewWillDismiss;//即將消失
- (void)actionAlertViewDidDismiss;//已經消失
- (void)actionAlertViewDidSelectBackGroundView;//點選了背景
你想讓點選背景的時候隱藏?
添加了屬性
@property (nonatomic, assign)BOOL isAutoHidden;//是否點選背景隱藏
isAutoHidden
如果是YES=消失,如果是NO,點選背景就不允許消失
不會適應螢幕高度?
demo裡有教你怎麼使用它來適配寬高,寬高其實在不同機型是相同的,不要超過
320
就好了
- (void)layoutContainerView{
//佈局containerview的位置,就是那個看得到的檢視
//layout self.containerView self.containerview is the alertView
CGFloat hight = 222;
CGFloat spideLeft = (ScreenWidth - TSACTIONVIEW_CONTAINER_WIDTH)/2;
CGFloat spideTop = (ScreenHeight - hight) * 0.4;
self.containerView.frame = CGRectMake(spideLeft, spideTop,TSACTIONVIEW_CONTAINER_WIDTH, hight);
}
怕彈窗多了有衝突?
彈窗會自動頂掉下一個,等後一個消失後,上一個又會出現,只要保證指向彈窗的指標沒有問題,就不會有錯
7.更多效果展示
1. 正常彈窗
2. 輸入彈窗
3. 網頁彈窗彈窗
4. 下拉效果彈窗
5. 正常彈窗
更多功能正在開發中….