個(gè)人相冊(cè)開(kāi)發(fā)(4)

一.導(dǎo)航欄類(lèi)的準(zhǔn)備

1.創(chuàng)建一個(gè)XLNavigationController類(lèi)僧鲁,用于管理導(dǎo)航欄的一些設(shè)置

2.向UIConstants中導(dǎo)入一些顏色設(shè)置

//導(dǎo)航欄的背景顏色
#define kNavigationBarTintColor [UIColor colorWithRed:249/255.0 green:245/255.0 blue:248/255.0 alpha:1];

//按鈕的顏色
#define kNavigationBarItemColor [UIColor colorWithRed:99/255.0 green:102/255.0 blue:111/255.0 alpha:1]

3.導(dǎo)航欄的相關(guān)設(shè)置

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //設(shè)置背景顏色
    self.navigationBar.barTintColor = kNavigationBarTintColor;
    
    //設(shè)置導(dǎo)航欄標(biāo)題的字體大小和字體顏色
    self.navigationBar.titleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor blackColor]};
}

二.工具條類(lèi)的準(zhǔn)備

1.創(chuàng)建XLToolBarView類(lèi)做入,用于充當(dāng)工具條的作用

2..在EnumConstants里面定義一個(gè)block類(lèi)型跃洛,用于回調(diào)工具條哪一個(gè)按鈕被點(diǎn)擊了

//定義一個(gè)block類(lèi)型铁孵,用于自定義toolBar回調(diào)按鈕的事件
typedef void(^ToolBarBlock) (NSInteger index);

3.定義一個(gè)數(shù)組用于接受創(chuàng)建的按鈕信息和用于回調(diào)那個(gè)按鈕被點(diǎn)擊的變量

/**接受外部傳遞的信息*/
@property (nonatomic,copy) NSArray *itemsArray;

/**回調(diào)某個(gè)按鈕被點(diǎn)了*/
@property (nonatomic,copy) ToolBarBlock block;

4.重寫(xiě)initWithFrame方法镜撩,設(shè)置背景顏色

-(instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        
        self.backgroundColor = kNavigationBarTintColor;
    }
    return self;
}

5.重寫(xiě)itemsArray的set方法戈二,將按鈕顯示

#pragma mark -------重寫(xiě)itemsArray的set方法 ---------
-(void)setItemsArray:(NSArray *)itemsArray{
    
    _itemsArray = itemsArray;
    
    //計(jì)算按鈕之間的間距
    CGFloat kPadding = (SCREEN_WIDTH-itemsArray.count*kSize) / (itemsArray.count+1);
    
    //添加
    for (int i = 0; i < itemsArray.count; i++) {
        
        //創(chuàng)建
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        
        //坐標(biāo)
        btn.frame = CGRectMake(kPadding+i*(kPadding+kSize), (42-kSize)/2.0, kSize, kSize);
        
        //tag值
        btn.tag = i+1;
        
        //賦予圖片
        [btn setImage:[UIImage imageNamed:[itemsArray objectAtIndex:i]] forState:UIControlStateNormal];
        
        //添加事件
        [btn addTarget:self action:@selector(btnDidClicked:) forControlEvents:UIControlEventTouchUpInside];
        
        //顯示
        [self addSubview:btn];
    }
}

#pragma mark -------按鈕被點(diǎn)了 ---------
-(void)btnDidClicked:(UIButton *)sender{
    
    if (self.block) {
        
        self.block(sender.tag);
    }
    
}

三.界面類(lèi)的準(zhǔn)備

1.創(chuàng)建XLBaseViewController類(lèi)舒裤,作為各個(gè)界面的父類(lèi)

2.定義兩個(gè)block類(lèi)型,用于正常按鈕和返回按鈕被點(diǎn)擊的回調(diào)事件

//定義的block類(lèi)型
typedef void (^BackBlock)(void);
typedef void (^ItemBlock)(UIButton *item);

3.在EnumConstants里面加入兩個(gè)將要用到的枚舉

//導(dǎo)航欄上添加按鈕的位置
typedef NS_ENUM(NSInteger,kButtonPostionType){
    kButtonPostionTypeLeft,  //左邊
    kButtonPostionTypeRight, //右邊
    kButtonPostionTypeNone   //不需要位置
};

//工具條的類(lèi)型
typedef NS_ENUM(NSInteger,ToolBarType) {
    ToolBarTypeMain,  //主界面
    ToolBarTypeAlbum, //相冊(cè)
    ToolBarTypeBrowser//相冊(cè)瀏覽
};

4.定義一些接口用于相關(guān)設(shè)置

//添加正常按鈕
-(UIBarButtonItem *)addItemWithName:(NSString *)name postion:(kButtonPostionType)postion complish:(ItemBlock)block;

//添加返回按鈕
-(void)addBackItem:(BackBlock)block;

//添加logo
-(void)addLogo;

//添加ToolBar
-(void)showToolBarWithType:(ToolBarType)type handle:(ToolBarBlock)block;

//隱藏ToolBar
-(void)hideToolBar;

5.導(dǎo)入工具條類(lèi)觉吭,定義一些要用到的變量腾供,并設(shè)置默認(rèn)背景顏色

#import "XLBaseViewController.h"
#import "XLToolBarView.h"

@interface XLBaseViewController ()

/**返回按鈕的block屬性變量*/
@property (nonatomic,copy) BackBlock backBlock;

/**左邊按鈕的block屬性變量*/
@property (nonatomic,copy) ItemBlock leftItemBlock;

/**右邊按鈕的block屬性變量*/
@property (nonatomic,copy) ItemBlock rightItemBlock;

/**底部工具欄*/
@property (nonatomic,strong) XLToolBarView *toolBarView;

@end

@implementation XLBaseViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //設(shè)置默認(rèn)背景顏色
    self.view.backgroundColor = [UIColor whiteColor];
}

6.寫(xiě)一個(gè)方法用來(lái)創(chuàng)建正常按鈕

#pragma mark -------創(chuàng)建按鈕 ---------
-(UIBarButtonItem *)createItemWithTitle:(NSString *)title image:(NSString *)imgName action:(SEL)action postion:(kButtonPostionType)postion{
    
    //獲取圖片
    UIImage *img = [UIImage imageNamed:imgName];
    //獲取一張可拉伸的圖片,拉伸點(diǎn)為圖片的中心點(diǎn)
    UIImage *stretchableImg = [img stretchableImageWithLeftCapWidth:img.size.width/2.0 topCapHeight:img.size.height/2.0];
    
    //創(chuàng)建
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 45, 30)];
    //設(shè)置tag值辨別左右鲜滩,0左邊伴鳖,1右邊,參考枚舉
    btn.tag = postion;
    //設(shè)置圖片
    [btn setBackgroundImage:stretchableImg forState:UIControlStateNormal];
    //設(shè)置文本
    [btn setTitle:title forState:UIControlStateNormal];
    //設(shè)置文本顏色
    [btn setTitleColor:kNavigationBarItemColor forState:UIControlStateNormal];
    //添加事件
    [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
    //創(chuàng)建UIBarItem
    UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
    
    return barItem;
}

7.創(chuàng)建正常按鈕和返回按鈕徙硅,并添加方法

#pragma mark -------添加一個(gè)按鈕-給左邊還是右邊榜聂,以及block ---------
-(UIBarButtonItem *)addItemWithName:(NSString *)name postion:(kButtonPostionType)postion complish:(ItemBlock)block{
    
    //創(chuàng)建按鈕
    UIBarButtonItem *item = [self createItemWithTitle:name image:nil action:@selector(barBarItemDidClick:) postion:postion];
    
    //判斷創(chuàng)建的按鈕位置
    if (postion == kButtonPostionTypeLeft) {
        
        //顯示
        self.navigationItem.leftBarButtonItem = item;
        
        //保存block
        self.leftItemBlock = block;
    }else{
        
        //顯示
        self.navigationItem.rightBarButtonItem = item;
        
        //保存block
        self.rightItemBlock = block;
    }
    
    return item;
}

#pragma mark -------添加返回按鈕 ---------
-(void)addBackItem:(BackBlock)block{
    
    //保存block
    self.backBlock = block;
    
    //創(chuàng)建按鈕
    UIBarButtonItem *back = [self createItemWithTitle:@"Back" image:nil action:@selector(backBarItemDidClick:) postion:kButtonPostionTypeNone];
    //顯示
    self.navigationItem.leftBarButtonItem = back;
}

#pragma mark -------正常按鈕觸發(fā)的事件 ---------
-(void)barBarItemDidClick:(UIButton *)sender{
    
    //判斷按鈕的位置-回調(diào)事件
    if (sender.tag == kButtonPostionTypeLeft) {
        
        if (self.leftItemBlock) {
            self.leftItemBlock(sender);
        }
    }else{
        
        if (self.rightItemBlock) {
            self.rightItemBlock(sender);
        }
        
    }
}

#pragma mark -------返回按鈕觸發(fā)的事件 ---------
-(void)backBarItemDidClick:(UIBarButtonItem *)sender{
    
    //回調(diào)事件
    if (self.backBlock) {
        self.backBlock();
    }
    
    //返回上一個(gè)界面
    [self.navigationController popViewControllerAnimated:YES];
}

8.導(dǎo)入素材,并實(shí)現(xiàn)添加logo的方法

-(void)addLogo{
    
    //設(shè)置圖片大小
    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 120, 19)];
    
    //設(shè)置圖片
    imgView.image = [UIImage imageNamed:@"NavigationBar_Logo_normal"];
    
    //顯示
    self.navigationItem.titleView = imgView;
}

9.實(shí)現(xiàn)添加工具條和移除工具條的方法

#pragma mark -------添加ToolBar ---------
-(void)showToolBarWithType:(ToolBarType)type handle:(ToolBarBlock)block{
    
    NSArray *itemsArray = nil;
    
    if (type == ToolBarTypeMain) {
        
        //主界面
        itemsArray = @[@"select-all",@"delete"];
    }else if(type == ToolBarTypeAlbum){
        
        //相冊(cè)界面
        itemsArray = @[@"select-all",@"copy",@"cut",@"delete"];
    }else{
        
        //相冊(cè)瀏覽界面
        itemsArray = @[@"delete",@"more"];
    }
    
    //創(chuàng)建toolBar
    self.toolBarView = [[XLToolBarView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, 42)];
    //接受數(shù)據(jù)
    _toolBarView.itemsArray = itemsArray;
    //保存block
    _toolBarView.block = block;
    
    //顯示
    [self.view addSubview:_toolBarView];
    [UIView animateWithDuration:0.5 animations:^{
        _toolBarView.y = SCREEN_HEIGHT-42;
    }];
}

#pragma mark -------隱藏ToolBar ---------
-(void)hideToolBar{
    
    [UIView animateWithDuration:0.5 animations:^{
        
        _toolBarView.y = SCREEN_HEIGHT;
    } completion:^(BOOL finished) {
        
        [_toolBarView removeFromSuperview];
    }];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闷游,一起剝皮案震驚了整個(gè)濱河市峻汉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脐往,老刑警劉巖休吠,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異业簿,居然都是意外死亡瘤礁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)梅尤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柜思,“玉大人岩调,你說(shuō)我怎么就攤上這事∩呐蹋” “怎么了号枕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)陨享。 經(jīng)常有香客問(wèn)我葱淳,道長(zhǎng),這世上最難降的妖魔是什么抛姑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任赞厕,我火速辦了婚禮,結(jié)果婚禮上定硝,老公的妹妹穿的比我還像新娘皿桑。我一直安慰自己,他們只是感情好蔬啡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布诲侮。 她就那樣靜靜地躺著,像睡著了一般箱蟆。 火紅的嫁衣襯著肌膚如雪浆西。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天顽腾,我揣著相機(jī)與錄音,去河邊找鬼诺核。 笑死抄肖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窖杀。 我是一名探鬼主播漓摩,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼入客!你這毒婦竟也來(lái)了管毙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤桌硫,失蹤者是張志新(化名)和其女友劉穎夭咬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铆隘,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卓舵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膀钠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掏湾。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裹虫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出融击,到底是詐尸還是另有隱情筑公,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布尊浪,位于F島的核電站匣屡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏际长。R本人自食惡果不足惜耸采,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望工育。 院中可真熱鬧虾宇,春花似錦、人聲如沸如绸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怔接。三九已至搪泳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扼脐,已是汗流浹背岸军。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓦侮,地道東北人艰赞。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像肚吏,于是被迫代替她去往敵國(guó)和親方妖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,098評(píng)論 1 32
  • 昨晚和一個(gè)半年沒(méi)見(jiàn)的老朋友喝酒罚攀,她看起來(lái)心情不錯(cuò)党觅,幾瓶酒下肚她開(kāi)始哭,然后跟我講了她這幾年來(lái)的故事斋泄。 在這里暫且稱(chēng)...
    第三十二片海閱讀 618評(píng)論 0 0