IOS 彈出式設計

IOS浮動窗口或者彈出串口的設計比較棘手,  我個人寫代碼的習慣是,不想在代碼中嵌入太多UI數據,比如長、寬、高等, 而是希望能將UI的管理集中在XIB文件中(在Android中,也是希望將這些集中在layout xml文件中). 看了不少例子都在代碼中潛入了座標數據。 這裏講述的一個解決彈出框設計的思路: 通過IOS的MVC模式, 將浮動或者彈出的小界面設計在XIB以及相應的controller中, 效果如下所示:


開始界面


彈出一個浮動窗口/相當於對話框

這樣的效果或許很普通, 但實質上在IOS中,卻需要堆砌很多的代碼纔可以做到。比如通過個性化的告警框來顯示,從參考資料中可以看出,這樣實現代碼真的很難理解, 本文講述的這個例子,基本上可以消除大部分的彈出框問題。 並且代碼的可讀性是非常強的。

思路如下: 浮動窗口,即在當前的窗口上,addsubview需要彈出的框; IOS跟Android界面佈局不一樣的地方就在這裏,addSubView不會導致原有的Child view覆蓋或者變形。所以這點真的可以好好的利用一下。

1. 彈出框的MVC設計, 局部控制一概由XIB搞定


2. 母面板的MVC設計, 做到跟彈出框UI的耦合度最小



3. 關鍵代碼,在父面板的Controller中

- (IBAction)canShowAction:(UIButton *)sender {
    //彈出框面板所在的Controller
    ControllerLite *c = [[ControllerLite alloc] initWithNibName:@"ControllerLite" bundle:nil];
    vItem = c.view;
    //這裏的作用只是爲了將彈出框置於手機中央
    CGFloat offset = 320.0f - vItem.bounds.size.width;
    vItem.center = CGPointMake(vItem.center.x + offset/2, vItem.center.y + 100);
    //這樣增加即可潛入彈出面板啦
    [[self view].window addSubview:vItem];    
      
}

4. 置於消失、如何組織多次彈出,需要參照源碼


5. 這裏設計的並不好,因爲存在兩個Controller進行了相互引用,實際上是可以消除的。 【存在相互引用的時候,不要兩個文件都用import對方,而是用@class聲明】, 可以用委託的方式實現解耦合. 參考



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章