iOS封裝分頁效果

#import?

@interface?WPageTitleView :?UIView

@property?(nonatomic,assign)?NSInteger?selectedIndex;

//添加參數(shù)數(shù)組

@property?(nonatomic,strong)?NSArray?*titles;

@property?(nonatomic,copy)?void?(^buttonSelected)(NSInteger?index);

@end

#import?"WPageTitleView.h"

@interface?WPageTitleView?()

@property?(nonatomic,strong)?UIView?*sliderView;

@property?(nonatomic,weak)?UIButton?*selectedButton;

@end

@implementation?WPageTitleView

- (void)titleButtonClicked:(UIButton?*)button {

?_selectedIndex?= button.tag;

?if?(self.selectedButton) {

?self.selectedButton.selected?=YES;

? ? }

button.selected=?NO;

?self.selectedButton= button;


?if?(self.buttonSelected) {

?self.buttonSelected(button.tag);

? ? }


?NSString* title? ? ? ? ? ? ? =?self.titles[button.tag];

?CGFloat?sliderWidth? ? ? ? ? = button.titleLabel.font.pointSize?* title.length;

? ? [self.sliderViewmas_remakeConstraints:^(MASConstraintMaker?*make) {

make.width.mas_equalTo(sliderWidth);

make.height.mas_equalTo(2);

make.centerX.equalTo(button);

make.bottom.equalTo(self).offset(-2);

? ? }];

? ? [UIView?animateWithDuration:0.25animations:^{

? ? ? ? [selflayoutIfNeeded];

? ? }];

}

- (void)setSelectedIndex:(NSInteger)selectedIndex {

?_selectedIndex?= selectedIndex;

?UIButton* button =?self.subviews[selectedIndex];

? ? [selftitleButtonClicked:button];

}

- (void)setTitles:(NSArray?*)titles {

? ? [self.subviewsmakeObjectsPerformSelector:@selector(removeFromSuperview)];

?_titles?= titles;

?CGFloat?width ? ? ? ? = [UIScreenmainScreen].bounds.size.width?/ titles.count;


?for?(?int?i ? ? ? ? ? =0; i

?UIButton* titleButton = [selftitleButton:titles[i]];

titleButton.tag?= i;

[self?addSubview:titleButton];

[titleButton?mas_makeConstraints:^(MASConstraintMaker?*make) {

make.top.bottom.equalTo(self);

make.left.equalTo(self).offset(width * i);

make.width.mas_equalTo(width);

? ? ? ? }];

?if?(i !=?0) {

titleButton.selected=?YES;

}?else?{

?self.selectedButton?= titleButton;

? ? ? ? }

? ? }

?UIButton?*button? ? ? =?self.subviews[0];

?NSString?*title ? ? ? = titles[0];

?CGFloat?sliderWidth ? = button.titleLabel.font.pointSize?* title.length;

? ? [selfaddSubview:self.sliderView];

? ? [self.sliderViewmas_makeConstraints:^(MASConstraintMaker?*make) {

make.width.mas_equalTo(sliderWidth);

make.height.mas_equalTo(4);

make.centerX.equalTo(button);

make.bottom.equalTo(self).offset(-3);

? ? }];

? ? [selflayoutIfNeeded];

}

- (UIButton?*)titleButton:(NSString?*)title {

?UIButton* titleButton ? ? ? = [[UIButtonalloc]?init];

[titleButton?addTarget:selfaction:@selector(titleButtonClicked:)forControlEvents:UIControlEventTouchUpInside];

? ? titleButton.titleLabel.font?= [UIFontsystemFontOfSize:15];

[titleButton?setTitleColor:[UIColorredColor]?forState:UIControlStateNormal];

[titleButton?setTitleColor:[UIColorgrayColor]?forState:UIControlStateSelected];

[titleButton?setTitle:titleforState:UIControlStateNormal];

?return?titleButton;

}

- (void)drawRect:(CGRect)rect {

? ? [selfmakelineStartPoint:self.sliderView.bottomandEndPoint:self.sliderView.bottom];

? ? [selfmakelineStartPoint:self.selectedButton.topandEndPoint:self.selectedButton.top];

}

- (void)makelineStartPoint:(CGFloat)statPoint andEndPoint:(CGFloat)endPoint {

?CGContextRef?context =UIGraphicsGetCurrentContext();

?CGContextSetLineCap(context,kCGLineCapRound);

?CGContextSetLineWidth(context,0.5);?//線寬

?CGContextSetAllowsAntialiasing(context,true);

?CGContextSetStrokeColorWithColor(context, [UIColorgrayColor].CGColor);

?CGContextBeginPath(context);


?CGContextMoveToPoint(context,?0, statPoint);?//起點(diǎn)坐標(biāo)

?CGContextAddLineToPoint(context,self.frame.size.width, endPoint); ?//終點(diǎn)坐標(biāo)

?CGContextStrokePath(context);

}

- (UIView?*)sliderView {

?if?(!_sliderView) {

?UIView* sliderView? ? ? ? ? ? = [[UIViewalloc]?init];

? ? ? ? sliderView.backgroundColor? ? = [UIColorredColor];

sliderView.layer.cornerRadius?=2;

sliderView.clipsToBounds=?YES;

?_sliderView?= sliderView;

? ? }

?return_sliderView;

}

@end

調(diào)用

WPageTitleView?*titleView = [[WPageTitleViewalloc]?init];

[headerView?addSubview:titleView];

?self.titleView?= titleView;

titleView.backgroundColor= [UIColorwhiteColor];

[titleView?mas_makeConstraints:^(MASConstraintMaker?*make) {

make.left.right.mas_equalTo(headerView);

make.bottom.equalTo(headerView.mas_bottom);

? ? ? ? make.height.mas_equalTo(NNTitleHeight);

? ? }];

? ? [self.scrollViewmas_makeConstraints:^(MASConstraintMaker?*make) {

? ? ? ? make.left.right.bottom.equalTo(self.view);

make.top.mas_equalTo(headerView.top);

? ? }];


?__weak?typeof(self) weakSelf =self;

titleView.titles?=?@[@"動(dòng)態(tài)",?@"文章",@"更多"];

titleView.selectedIndex=?0;

titleView.buttonSelected?= ^(NSInteger?index){

[weakSelf.scrollView?setContentOffset:CGPointMake(NNScreenWidth?* index,0)animated:YES];

? ? };

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贴见,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子植袍,更是在濱河造成了極大的恐慌筋遭,老刑警劉巖打颤,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漓滔,居然都是意外死亡编饺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門响驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來透且,“玉大人,你說我怎么就攤上這事豁鲤』嗵埽” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵琳骡,是天一觀的道長锅论。 經(jīng)常有香客問我,道長日熬,這世上最難降的妖魔是什么棍厌? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任肾胯,我火速辦了婚禮,結(jié)果婚禮上耘纱,老公的妹妹穿的比我還像新娘敬肚。我一直安慰自己,他們只是感情好束析,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布艳馒。 她就那樣靜靜地躺著,像睡著了一般员寇。 火紅的嫁衣襯著肌膚如雪弄慰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天蝶锋,我揣著相機(jī)與錄音陆爽,去河邊找鬼。 笑死扳缕,一個(gè)胖子當(dāng)著我的面吹牛慌闭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躯舔,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼驴剔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粥庄?” 一聲冷哼從身側(cè)響起丧失,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惜互,沒想到半個(gè)月后布讹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡载佳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年炒事,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔫慧。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挠乳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姑躲,到底是詐尸還是另有隱情睡扬,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布黍析,位于F島的核電站卖怜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阐枣。R本人自食惡果不足惜马靠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一奄抽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甩鳄,春花似錦逞度、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揖赴,卻和暖如春馆匿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背燥滑。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工渐北, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铭拧。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓腔稀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羽历。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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

  • iOS_autoLayout_Masonry 概述 Masonry是一個(gè)輕量級(jí)的布局框架與更好的包裝AutoLay...
    指尖的跳動(dòng)閱讀 1,152評論 1 4
  • (一)Masonry介紹 Masonry是一個(gè)輕量級(jí)的布局框架 擁有自己的描述語法 采用更優(yōu)雅的鏈?zhǔn)秸Z法封裝自動(dòng)布...
    木易林1閱讀 2,316評論 0 3
  • Masonry是一個(gè)輕量級(jí)的布局框架淡喜,擁有自己的描述語法秕磷,采用更優(yōu)雅的鏈?zhǔn)秸Z法封裝自動(dòng)布局,簡潔明了并具有高可讀性...
    3dcc6cf93bb5閱讀 1,753評論 0 1
  • 一炼团、前言 關(guān)于蘋果的布局一直是我比較糾結(jié)的問題澎嚣,是寫代碼來控制布局,還是使用storyboard來控制布局呢瘟芝?以前...
    iplaycodex閱讀 2,437評論 0 1
  • Masonry手寫Autolayout專題 Masonry介紹與使用實(shí)踐:快速上手Autolayout http:...
    Kevin_Junbaozi閱讀 1,136評論 0 2