今天本該閑著沒事捌议,看看百度新聞就下班的哼拔,無奈被一個(gè)坑比讓我給他封裝控件。瓣颅。倦逐。
我能怎么辦,我也很無奈啊宫补。檬姥。。
基本了解需求之后守谓,大概知道他要什么效果了穿铆,其實(shí)也很簡單,自己以前做的項(xiàng)目也都用到了這個(gè)斋荞,但是之前一直忙(可能是忘記了荞雏。。。),一直沒有做過相關(guān)的封裝凤优,這次簡單的來做一下封裝悦陋。。筑辨。其實(shí)前幾天做過一個(gè)更為復(fù)雜的俺驶,但是那個(gè)是借助了別人的封裝,所以也沒有發(fā)出來棍辕,畢竟是別人的勞動(dòng)成果
二話不說暮现,拿起鍵盤一頓敲!3选栖袋!
敲完了,效果出來了
(界面略丑抚太。塘幅。。)
來說下簡單的思路
首先考慮到到封裝尿贫,很多屬性以及顏色需要使用电媳,所以做了一個(gè)接口
- (void)ChoseColor:(UIColor *)choseColor notChoseColor:(UIColor *)notChoseColor lineColor:(UIColor *)lineColor choseLineColor:(UIColor *)choseLineColor linewidth:(float)lineWidth firstButtonTittle:(NSString *)firstButtonTittle secondButtonTittle:(NSString *)secondButtonTittle buttonWidth:(float)buttonWidth;
外部創(chuàng)建之后,直接去調(diào)用
TopSlideView *view = [[TopSlideView alloc] initWithFrame:CGRectMake(0, 200, self.view.frame.size.width, 60)];
[view ChoseColor:[UIColor redColor] notChoseColor:[UIColor blueColor] lineColor:[UIColor grayColor] choseLineColor:[UIColor orangeColor] linewidth:2 firstButtonTittle:@"推薦模型" secondButtonTittle:@"我的模型" buttonWidth:100];
// view.backgroundColor = [UIColor greenColor];
[self.view addSubview:view];
這里因?yàn)橹挥袃蓚€(gè)按鈕庆亡,還是比較簡單的功能匾乓,所以我就直接用了button(多的話可能會(huì)使用collectionView 這里我之后會(huì)再封裝一個(gè)collectionView的控件)
具體的實(shí)現(xiàn)思路:
1、點(diǎn)擊button身冀,觸發(fā)響應(yīng)事件钝尸,相應(yīng)事件里面改變button字體的顏色括享,做成選中后的效果
2搂根、button下方的線條,做一個(gè)動(dòng)畫過渡過去铃辖,看著會(huì)比較舒服
- (void)rightButtonAction {
[self.leftButton setTitleColor:self.notchoseColor forState:(UIControlStateNormal)];
[self.rightButton setTitleColor:self.choseColor forState:(UIControlStateNormal)];
[UIView animateWithDuration:0.3 animations:^{
CGRect rect = self.choseImageView.frame;
rect.origin.x = CGRectGetMinX(self.rightButton.frame);
self.choseImageView.frame = rect;
}];
}
這里要注意剩愧,在獲取self.rightButton.frame,我們用 CGRectGetMinX(self.rightButton.frame)娇斩,可以直接獲取到最左邊的X坐標(biāo)仁卷,也就是最小的X坐標(biāo)
基本就是這些思路,如有要在下面嵌套一個(gè)tableView的話犬第,也可以在button的觸發(fā)事件里锦积,切換scrollView的ContentOffset,實(shí)現(xiàn)也不是很難
代碼在git里面歉嗓,下面附上地址
https://github.com/bommmmmmm/head-change-with-animation