項目框架的搭建

  • 主流框架的搭建, 底層UITabBarController晦墙,上層UINavigationController择葡,然后在給其設(shè)置根控制器。當(dāng)然也可以根據(jù)控制器击你,來選擇作為那中導(dǎo)航控制器的根控制器玉组。
    • 代碼實現(xiàn)
- (void)setUpOneChildViewController:(UIViewController *)vc image:(UIImage *)image selImage:(UIImage *)selImage title:(NSString *)title
{
    // 設(shè)置導(dǎo)航條 (各自控制器,來控制自己導(dǎo)航條的內(nèi)容)
    vc.navigationItem.title = title;
   ...
    // 如果想要一個控制器既展示自己的view丁侄,同時想增加一個導(dǎo)航條惯雳,直接包裝成導(dǎo)航控制器
    // 包裝成導(dǎo)航控制器
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];

... // 一般為導(dǎo)航條的設(shè)置內(nèi)容
    [self addChildViewController:nav];
}

  • 關(guān)于導(dǎo)航條的設(shè)置內(nèi)容不應(yīng)該讓外界知道,應(yīng)該讓其自己進(jìn)行管理 鸿摇,所以需要自定義導(dǎo)航控制器石景。
    • + load方法的調(diào)用,當(dāng)程序一啟動的時候就會把這個類加載進(jìn)內(nèi)存 拙吉。(只調(diào)用一次)
      • 作用:為類分配一個內(nèi)存
    • + initialize方法潮孽,當(dāng)前類或者它的子類第一次使用的時候進(jìn)行調(diào)用,如果有多個子類筷黔,也有可能進(jìn)行多次調(diào)用(所以一般會給其內(nèi)部設(shè)置條件執(zhí)行)
      • 作用:初始化往史,可以在類初始化的時候,給控件設(shè)置一些需要統(tǒng)一的設(shè)置必逆。
+ (void)initialize
{
    // 如果是這個類調(diào)用了方法怠堪,則執(zhí)行以下設(shè)置
    if(self == [LXLNavigationController class])
    {
    //    導(dǎo)航條的設(shè)置
    // 設(shè)置導(dǎo)航條的背景揽乱,文字顏色

    // 誰用我的導(dǎo)航控制器名眉,只設(shè)置使用自己導(dǎo)航控制器下的導(dǎo)航條

    // 獲取整個app里所有導(dǎo)航條外觀的標(biāo)志
//    UINavigationBar *bar = [UINavigationBar appearance];

    // 獲取當(dāng)前類下的導(dǎo)航條
    // self->LXLNavigationController
    UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:self, nil];


    // 設(shè)置導(dǎo)航條背景圖片,必須填UIBarMetricsDefault
    // 使用UIBarMetricsDefault凰棉,導(dǎo)航控制器的子控制器view的尺寸不包括導(dǎo)航條部分
    [bar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];


    // 設(shè)置導(dǎo)航條文字顏色
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    // 設(shè)置顏色
    dict[NSForegroundColorAttributeName] = [UIColor whiteColor];
    dict[NSFontAttributeName] = [UIFont boldSystemFontOfSize:22];
    [bar setTitleTextAttributes:dict];
}

}

  • 關(guān)于部分功能的實現(xiàn)损拢,比如pop功能的實現(xiàn)(一般都是跳窗,廣告功能撒犀。顯示活動)

    • 功能描述福压,點擊活動按鈕彈出彈框,并布置蒙版
    • 點擊叉號按鈕或舞,圖片縮小至活動處消失荆姆,并且,蒙版關(guān)閉
    • 代碼實現(xiàn) (盡量模仿蘋果方法去進(jìn)行方法的命名)
  • 自定義蒙版(HUD)UIView 創(chuàng)建接口+ show + hide 模仿系統(tǒng)方法映凳,[類名 show]便可以顯示 [類名 hide]便可以隱藏

    • 蒙版必須要加載到主窗口上胆筒,這樣才能顯示在最外邊。
+ (void)show
{
    LXLCover *cover = [[self alloc] init];

    cover.frame = [UIApplication shareApplication].keyWindow.bounds;

    cover.backgroundColor = [UIColor blackColor];

    cover.alpha = 0.5;

    // 獲取主窗口
    [[UIApplication shareApplication].keyWindow addSubview:cover];
}
+ (void)hide
{
    // 隱藏蒙板
    // 遍歷主窗口上的子控件,只要是蒙版類的仆救,就進(jìn)行移除抒和,這樣就把蒙版進(jìn)行移除了
    for (UIView *childView in [UIApplication shareApplication].keyWindow.subviews) {
        if ([childView isKindOfClass:self]) { // 是蒙板
            [childView removeFromSuperview];
        }
    }
}

  • 自定義pop,利用xib彤蔽,因為其尺寸固定摧莽,圖片固定,只是位置需要設(shè)置顿痪,所以直接xib進(jìn)行設(shè)置
    • pop顯示在HUD上面镊辕,所以由xib創(chuàng)建,并且直接添加到主窗口上蚁袭。
    • 提供接口+ showInPoint: 丑蛤、~~~+ hideInPoint:~~~- hideInPoint: ,以為外界要能拿到此pop,才能執(zhí)行點擊縮放的按鈕傳遞的事件(屬于逆?zhèn)魉貉郑枰恚?/li>
    • 代碼如下
+ (instancetype)showInPoint:(CGPoint)point
{
    // xib 中加載pop
   LXLPopMenu *menu =  [[NSBundle mainBundle] loadNibNamed:@"LXLPopView" owner:nil options:nil][0];
    // 從外界的到顯示的中心點
    menu.center = point;
    // 將其加載到 主窗口上受裹,主要是為了顯示在最外邊
    [[UIApplication shareApplication].keyWindow  addSubview:menu];

    return menu;

}

// 隱藏
- (void)hideInPoint:(CGPoint)point
{
//  執(zhí)行0.5s動畫
    [UIView animateWithDuration:.5 animations:^{
// 設(shè)置縮小至的中心點
        self.center = point;

        // 直接修改父控件的尺寸,是不會影響子控件
//        self.bounds = CGRectMake(0, 0, 1, 1);

        // 如果設(shè)置0虏束,控件直接縮放為0棉饶,沒有動畫,如果想要動畫镇匀,搞一個最小值
        self.transform = CGAffineTransformMakeScale(0.01, 0.01);

    } completion:^(BOOL finished) {
// 動畫完成后移除
        [self removeFromSuperview];

    }];
}

// 點擊關(guān)閉按鈕照藻,調(diào)用
- (IBAction)close:(id)sender {

    // 通知代理做事情,告訴代理點擊了關(guān)閉
    if ([_delegate respondsToSelector:@selector(popMenuDidClickCloseMenu:)]) {
        [_delegate popMenuDidClickCloseMenu:self];
    }
}
  • 控制器多需完成的事
    • 點擊活動彈出pop和HUD
    • 點擊叉號 退出pop和HUD汗侵,不過對去HUD得退出幸缕,需在pop移除以后操作,否則用戶體驗不好(造成蒙版移除了晰韵,但pop 還正在縮蟹⑶恰)
    • 思考,最能知道什么時候pop移除的就是它自己雪猪,所以如果能將HUD移除的代碼栏尚,能傳給pop,讓pop執(zhí)行是最好了只恨。 這樣就用到了block译仗。(不建議在pop中調(diào)用cover隱藏的方法,那樣就破壞了官觅,這個控件的純潔性纵菌,讓其耦合降低“因為必須有cover的頭文件才行”)下面來具體進(jìn)行介紹:
    • 代碼實現(xiàn)
    • block定義方法 void (^completion)(參數(shù)) = ^(){};
    • 當(dāng)有人調(diào)用block的時候,只需要傳入?yún)?shù)休涤,具體實現(xiàn)由block自己進(jìn)行實現(xiàn)
    • block定義 (跟函數(shù)有點相似咱圆,先建立函數(shù),如果使用的時候只需要調(diào)用函數(shù)名加參數(shù)就行了)
Snip20150725_5.png
Snip20150725_6.png
// 點擊活動按鈕的時候調(diào)用
- (void)activity
{
    // 彈出蒙板,
    // 只要以后想要把一個控件顯示在最外邊闷堡,就添加到窗口隘膘,提供一個show方法
    [LXLCover show];

    // 彈出pop菜單
    LXLPopView *menu = [LXLPopView showInPoint:self.view.center];

    menu.delegate = self;

}


// block:作用保存一段代碼

#pragma mark - LXLPopViewDelegate

// 點擊菜單上關(guān)閉按鈕的時候就會調(diào)用
- (void)popMenuDidClickCloseMenu:(LXLPopView *)menu
{
    [UIView animateWithDuration:0 animations:nil completion:^(BOOL finished) {

    }];

    // 定義移動完成的block,保存移動完成的代碼
    void (^completion)() = ^{

        // 當(dāng)移動完成的時候,把蒙板消失
        [LXLCover hide];
    };

    // block精髓:可以當(dāng)做參數(shù)去用杠览。

    // 菜單移動到某個位置弯菊,并且縮放。
    [menu hideInPoint:CGPointMake(44, 44) completion:completion];

//    [menu hideInPoint:CGPointMake(44, 44) completion:^(){
//
//    }];


}

  • 所以重寫pop的隱藏方法
  • 代碼如下踱阿,傳入 block代碼塊
// 隱藏
- (void)hideInPoint:(CGPoint)point completion:(void (^)())completion
{
    /*
     void (^completion)() = ^{

     // 當(dāng)移動完成的時候管钳,把蒙板消失
     [LXLCover hide];
     };
     */
    [UIView animateWithDuration:.5 animations:^{

        self.center = point;

        // 直接修改父控件的尺寸,是不會影響子控件
//        self.bounds = CGRectMake(0, 0, 1, 1);

        // 如果設(shè)置0软舌,控件直接縮放為0才漆,沒有動畫,如果想要動畫佛点,搞一個最小值
        self.transform = CGAffineTransformMakeScale(0.01, 0.01);

    } completion:^(BOOL finished) {

        [self removeFromSuperview];
//        [LXLCover hide];

        if (completion) {

            completion();
        }

        // 移除蒙板
//        [LXLCover hide];

    }];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末醇滥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子超营,更是在濱河造成了極大的恐慌鸳玩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件演闭,死亡現(xiàn)場離奇詭異不跟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)米碰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門窝革,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吕座,你說我怎么就攤上這事虐译。” “怎么了米诉?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵菱蔬,是天一觀的道長。 經(jīng)常有香客問我史侣,道長,這世上最難降的妖魔是什么魏身? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任惊橱,我火速辦了婚禮,結(jié)果婚禮上箭昵,老公的妹妹穿的比我還像新娘税朴。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布正林。 她就那樣靜靜地躺著泡一,像睡著了一般。 火紅的嫁衣襯著肌膚如雪觅廓。 梳的紋絲不亂的頭發(fā)上鼻忠,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音杈绸,去河邊找鬼帖蔓。 笑死,一個胖子當(dāng)著我的面吹牛瞳脓,可吹牛的內(nèi)容都是我干的塑娇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劫侧,長吁一口氣:“原來是場噩夢啊……” “哼埋酬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烧栋,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奇瘦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后劲弦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耳标,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年邑跪,在試婚紗的時候發(fā)現(xiàn)自己被綠了次坡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡画畅,死狀恐怖砸琅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轴踱,我是刑警寧澤症脂,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站淫僻,受9級特大地震影響诱篷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雳灵,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一棕所、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悯辙,春花似錦琳省、人聲如沸迎吵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽击费。三九已至,卻和暖如春桦他,著一層夾襖步出監(jiān)牢的瞬間蔫巩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工瞬铸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留批幌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓嗓节,卻偏偏與公主長得像荧缘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拦宣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫截粗、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 隱馬爾可夫模型(Hidden Markov Model鸵隧,HMM)是統(tǒng)計模型绸罗,它用來描述一個含有隱含未知參數(shù)的馬爾可...
    chaaffff閱讀 1,370評論 0 1
  • 本文為Sandy老師微信公眾號舊文,舊詞新講豆瘫,喜歡的朋友歡迎關(guān)注微信公眾號查看更多內(nèi)容珊蟀。 Vocabulary a...
    讀者_(dá)在路上閱讀 2,243評論 0 3
  • 2013年.有個機(jī)會擺在我面前,但是我沒有看見外驱。 我的朋友極力勸說我買比特幣育灸,我卻對他說那個是游戲幣,買來有什么用...
    譚皓勻閱讀 330評論 0 0
  • 改變總是會讓人充滿期待昵宇。8年前奧巴馬選舉的時候磅崭,選舉口號一個詞“Change”,強調(diào)自己是改革者瓦哎,至少他的膚色就代...
    橙子LifeX閱讀 236評論 0 0