美文网首页
iOS封装分页效果

iOS封装分页效果

作者: 龍飝 | 来源:发表于2018-01-22 10:07 被阅读643次

#import 

@interface WPageTitleView : UIView

@property (nonatomic,assign) NSInteger selectedIndex;

//添加参数数组

@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); //起点坐标

 CGContextAddLineToPoint(context,self.frame.size.width, endPoint);  //终点坐标

 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

调用

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 = @[@"动态", @"文章",@"更多"];

titleView.selectedIndex= 0;

titleView.buttonSelected = ^(NSInteger index){

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

    };

相关文章

  • iOS封装分页效果

    #import @interfaceWPageTitleView :UIView @property(nonato...

  • 品优购学习笔记二-品牌列表分页的实现

    1.品牌列表分页的实现 效果展示: 1.1后端代码 1.1.1 分页结果封装实体 1.1.2服务接口层 1.1.3...

  • 月历+周历

    >功能 ``` 月历日历单独封装 各自带星期条 月历: 大 collectview(实现左右分页切换效果) +小 ...

  • UIPageViewController详解

    UIPageViewController是iOS 5.0之后提供的一个分页控件可以实现图片轮播效果和翻书效果.使用...

  • 【SpringBoot】分页查询

    SpringBoot Jpa封装了分页查询 Pageable是 Spring 封装的分页实现类,使用的时候需要传入...

  • iOS 快速实现分页界面的搭建。

    iOS 快速实现分页界面的搭建。 项目中我们经常会遇到滚动分页的设计效果,被用来对不同数据界面的展示进行分类。我...

  • 分页的封装

    分页的封装设计

  • swift图片浏览器

    先看运行效果: 1. UIPageViewController简介 它是iOS 5.0之后提供的一个分页控件可以实...

  • iOS抽屉效果封装

    一个简单的抽屉效果,简单实用!整体思路:主要是在控制器的View上添加了两个View,一个左侧leftView和一...

  • 封装分页

    项目例子 分页父组件 分页子组件 有些人可能不明白这个这个子组件pagination.vue为啥pageSizes...

网友评论

      本文标题:iOS封装分页效果

      本文链接:https://www.haomeiwen.com/subject/itxlaxtx.html