iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换

iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换

不多说直接上效果图和代码

iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换

1.设置RootViewController为一个导航试图控制器

//  Copyright © 2016年 Chason. All rights reserved.
//

#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];
    [self.window makeKeyAndVisible];

return YES;
}

2.ViewController

//  Copyright © 2016年 Chason. All rights reserved.
//

#import "ViewController.h"
#import "XLScrollViewer.h"
#import "TotalTableView.h"
#import "UnSolveTableView.h"
#import "SolvedTableView.h"
@interface ViewController ()
@property (nonatomic, strong) TotalTableView *total;
@property (nonatomic, strong) UnSolveTableView *unSolve;
@property (nonatomic, strong) SolvedTableView *solved;;
@property (nonatomic, strong) XLScrollViewer *headerScrollView;
@end
//手机屏幕的宽和高
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define KScreenHeight [UIScreen mainScreen].bounds.size.height
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title = @"处理列表";
    //添加头导航条
    //视图初始化
    CGRect frame = CGRectMake(0, 64, kScreenWidth, KScreenHeight - 64);
    self.total = [[TotalTableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, KScreenHeight - 64) style:UITableViewStyleGrouped];
    self.unSolve = [[UnSolveTableView alloc] initWithFrame:CGRectMake(kScreenWidth, 0, kScreenWidth, KScreenHeight - 64) style:UITableViewStyleGrouped];
    self.solved = [[SolvedTableView alloc] initWithFrame:CGRectMake(2 * kScreenWidth, 0, kScreenWidth, KScreenHeight - 64) style:UITableViewStyleGrouped];
    NSArray *views = @[self.total, self.unSolve, self.solved];
    NSArray *titles = @[@"全部", @"未处理", @"已处理"];
    
    //初始化headerScrollView
    self.headerScrollView = [XLScrollViewer scrollWithFrame:frame withViews:views withButtonNames:titles withThreeAnimation:211];
    //定义滚动条属性
    
    self.headerScrollView.xl_topBackColor = [UIColor whiteColor];
    self.headerScrollView.xl_sliderColor = [UIColor colorWithRed:18 / 255.0 green:129 / 255.0 blue:201 / 255.0 alpha:1.0];
    self.headerScrollView.xl_buttonColorNormal = [UIColor grayColor];
    self.headerScrollView.xl_buttonColorSelected = [UIColor colorWithRed:18 / 255.0 green:129 / 255.0 blue:201 / 255.0 alpha:1.0];
    //    self.headerScrollView.xl_buttonFont = 15;
    //    self.headerScrollView.xl_topHeight = 40;
    [self.view addSubview:self.headerScrollView];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

3.自定义多个页面, 我这里自定义TableView, 实际上可以是各种类型的UIView

//  Copyright © 2016年 Chason. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface TotalTableView : UITableView<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) NSMutableArray *dataArray;
@end

//  Copyright © 2016年 Chason. All rights reserved.
//

#import "TotalTableView.h"
#import "DIYTableViewCell.h"
@implementation TotalTableView

- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
    self = [super initWithFrame:frame style:style];
    if (self) {
        self.dataSource = self;
        self.delegate = self;
        self.dataArray = [[NSMutableArray alloc] initWithCapacity:1];
        NSArray *titleArray = [NSArray arrayWithObjects:@"天花板坏了", @"天然气泄漏", @"下水道堵塞", @"地板损坏", @"防盗网破裂", @"门铃坏了", @"窗子坏了", @"厕所坏了", nil];
        NSArray *dateArray = [NSArray arrayWithObjects:@"2016-4-11", @"2016-4-11", @"2014-4-10", @"2014-4-5", @"2014-4-5", @"2014-4-1", @"2013-10-9", @"2013-9-5", nil];
        self.separatorStyle = UITableViewCellSeparatorStyleNone;
        [self.dataArray addObject:titleArray];
        [self.dataArray addObject:dateArray];
    }
    return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataArray[0] count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    DIYTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"total"];
    if (cell == nil) {
        cell = [[DIYTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"total"];
    }
    cell.title.text = self.dataArray[0][indexPath.row];
    cell.date.text = self.dataArray[1][indexPath.row];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 70;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 15;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 5;
}

@end

//  Copyright © 2016年 Chason. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UnSolveTableView : UITableView<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) NSMutableArray *dataArray;

@end

//  Copyright © 2016年 Chason. All rights reserved.
//

#import "UnSolveTableView.h"
#import "DIYTableViewCell.h"

@implementation UnSolveTableView

- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
    self = [super initWithFrame:frame style:style];
    if (self) {
        self.dataSource = self;
        self.delegate = self;
        self.backgroundColor = [UIColor redColor];
        self.dataArray = [[NSMutableArray alloc] initWithCapacity:1];
        self.separatorStyle = UITableViewCellSeparatorStyleNone;
        NSArray *titleArray = [NSArray arrayWithObjects:@"天花板坏了", @"天然气泄漏", @"下水道堵塞", @"地板损坏", @"防盗网破裂", @"门铃坏了", @"窗子坏了", @"厕所坏了", nil];
        NSArray *dateArray = [NSArray arrayWithObjects:@"2016-4-11", @"2016-4-11", @"2014-4-10", @"2014-4-5", @"2014-4-5", @"2014-4-1", @"2013-10-9", @"2013-9-5", nil];
        
        [self.dataArray addObject:titleArray];
        [self.dataArray addObject:dateArray];
    }
    return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataArray[0] count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    DIYTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"total"];
    if (cell == nil) {
        cell = [[DIYTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"total"];
    }
    cell.title.text = self.dataArray[0][indexPath.row];
    cell.date.text = self.dataArray[1][indexPath.row];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 70;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 15;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 5;
}

@end

//  Copyright © 2016年 Chason. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface SolvedTableView : UITableView<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) NSMutableArray *dataArray;

@end

//  Copyright © 2016年 Chason. All rights reserved.
//

#import "SolvedTableView.h"
#import "DIYTableViewCell.h"

@implementation SolvedTableView

- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
    self = [super initWithFrame:frame style:style];
    if (self) {
        self.dataSource = self;
        self.delegate = self;
        self.backgroundColor = [UIColor greenColor];
        self.dataArray = [[NSMutableArray alloc] initWithCapacity:1];
        NSArray *titleArray = [NSArray arrayWithObjects:@"天花板坏了", @"天然气泄漏", @"下水道堵塞", @"地板损坏", @"防盗网破裂", @"门铃坏了", @"窗子坏了", @"厕所坏了", nil];
        NSArray *dateArray = [NSArray arrayWithObjects:@"2016-4-11", @"2016-4-11", @"2014-4-10", @"2014-4-5", @"2014-4-5", @"2014-4-1", @"2013-10-9", @"2013-9-5", nil];
        self.separatorStyle = UITableViewCellSeparatorStyleNone;
        [self.dataArray addObject:titleArray];
        [self.dataArray addObject:dateArray];
    }
    return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataArray[0] count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    DIYTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"total"];
    if (cell == nil) {
        cell = [[DIYTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"total"];
    }
    cell.title.text = self.dataArray[0][indexPath.row];
    cell.date.text = self.dataArray[1][indexPath.row];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 70;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 15;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 5;
}

@end

//自定义cell

//  Copyright © 2016年 Chason. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface DIYTableViewCell : UITableViewCell
@property (nonatomic, strong) UIView *backView;
@property (nonatomic, strong) UILabel *title;
@property (nonatomic, strong) UILabel *date;
@end

//  Copyright © 2016年 Chason. All rights reserved.
//

#import "DIYTableViewCell.h"
//手机屏幕的宽和高
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define KScreenHeight [UIScreen mainScreen].bounds.size.height
@implementation DIYTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.backView = [[UIView alloc] initWithFrame:CGRectMake(15, 5, kScreenWidth - 30, 60)];
        self.backView.backgroundColor = [UIColor groupTableViewBackgroundColor];
        self.backView.layer.cornerRadius = 10;
        [self addSubview:self.backView];
        self.title  = [[UILabel alloc] initWithFrame:CGRectMake(5, 10, kScreenWidth - 40, 15)];
        self.title.font = [UIFont systemFontOfSize:17];
        [self.backView addSubview:self.title];
        self.date = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, kScreenWidth - 40, 15)];
        self.date.font = [UIFont systemFontOfSize:16];
        self.date.textAlignment = NSTextAlignmentRight;
        [self.backView addSubview:self.date];
    }
    return self;
}

@end

4.重头戏, 封装的滚动控制条, 只是我之前看一位大神写的,忘记出处了,特此申明,表示抱歉, 再次表示膜拜...

#import <UIKit/UIKit.h>

@interface XLScrollViewer : UIView

#pragma mark -使用XLScrollView
/**
 *     使用XLScrollView,数组如果填nil,则为默认,choose处填写三位数字,代表选择与否,1代表选择,2代表不选择。例如:你准备选择第1种和第3种动画效果,则填写121
 */
-(instancetype)initWithFrame:(CGRect)frame withViews:(NSArray *)views withButtonNames:(NSArray *)names withThreeAnimation:(int)choose;//实例方法
+(instancetype)scrollWithFrame:(CGRect)frame withViews:(NSArray *)views withButtonNames:(NSArray *)names withThreeAnimation:(int)choose;//类方法

#pragma mark -三种动画效果,按照顺序来
/**
 *     1、滑动视图时是否展示头部控制条 移动按钮 的动画效果,默认为 NO
 */
@property (nonatomic) BOOL xl_isMoveButton;
/**
 *     2、点击未被选中的按钮时时候展示 缩放按钮 的动画效果,默认为 NO
 */
@property (nonatomic) BOOL xl_isScaleButton;
/**
 *     3、滑动视图时是否展示头部控制条 滑动滑块 的动画效果,默认为 NO
 */
@property (nonatomic) BOOL xl_isMoveSlider;

/**
 *     要展示在scollView中的view,一页一视图,可在new出来后直接放入数组
 *     如果为空,默认为 红、橙、黄三个背景色的view
 */
@property (nonatomic ,strong) NSArray *xl_views;
/**
 *     头部控制条按钮的名称,存放在此数组中,NSString直接赋值,默认字号下不宜超过3个汉字
 *     如果为空,默认为  @[@"田馥甄",@"章晓亮",@"哈哈哈"]
 */
@property (nonatomic ,copy) NSArray *xl_buttonNames;

#pragma mark -各种可供自定义的属性
/**
 *     头部控制条的高度,默认为50
 */
@property (nonatomic ,assign) CGFloat xl_topHeight;
/**
 *     头部控制条按钮的字号,默认为18
 */
@property (nonatomic ,assign) CGFloat xl_buttonFont;
/**
 *     头部控制条按钮在UIControlStateNormal状态下的文字颜色,默认为黑色
 */
@property (nonatomic ,strong) UIColor *xl_buttonColorNormal;
/**
 *     头部控制条按钮在UIControlStateSelected状态下的文字颜色,默认为白色
 */
@property (nonatomic ,strong) UIColor *xl_buttonColorSelected;
/**
 *     头部控制条的背景颜色,默认为浅灰色lightGrayColor
 */
@property (nonatomic ,strong) UIColor *xl_topBackColor;
/**
 *     头部控制条的背景图片,默认为无
 */
@property (nonatomic ,strong) UIImage *xl_topBackImage;
/**
 *     头部控制条里的滑块颜色,默认为蓝色
 */
@property (nonatomic ,strong) UIColor *xl_sliderColor;
/**
 *     微调滑块相对于按钮的坐标x值,默认为10
 */
@property (nonatomic ,assign) CGFloat xl_buttonToSlider;
#pragma mark 由于滑块的宽度根据按钮文字内容自适应,若要调整滑块的宽度,只需在xl_buttonNames数组中的字符串左右两边加上空格即可
/**
 *     头部控制条里的滑块的高度,默认为2
 */
@property (nonatomic ,assign) CGFloat xl_sliderHeight;
/**
 *     头部控制条滑块是否设置圆角,默认为 NO
 */
@property (nonatomic) BOOL xl_isSliderCorner;
/**
 *     设置头部控制条圆角比例,默认为5
 */
@property (nonatomic ,assign) CGFloat xl_sliderCorner;

@end

#define screen_width [UIScreen mainScreen].bounds.size.width

#import "XLScrollViewer.h"

@interface XLScrollViewer ()<UIScrollViewDelegate>
{
    int _x;
    CGFloat _x0;
}
@property(nonatomic,strong)UIScrollView *scroll1;
@property(nonatomic,strong)UIScrollView *scroll2;
@property(nonatomic,strong)UIView *view2;

@property(nonatomic ,strong)NSMutableArray *buttons;

@end

@implementation XLScrollViewer

-(instancetype)initWithFrame:(CGRect)frame withViews:(NSArray *)views withButtonNames:(NSArray *)names withThreeAnimation:(int)choose{
    self =[super initWithFrame:frame];
    if (self) {
        self.xl_views =views;
        self.xl_buttonNames =names;
        NSString *temp =[NSString stringWithFormat:@"%d",choose];
        NSArray *arr =@[@"111",@"112",@"121",@"211",@"122",@"212",@"221",@"222"];
        for (NSString *str in arr) {
            if ([temp isEqualToString:str]) {
                if ([[temp substringWithRange:NSMakeRange(0, 1)] isEqual:@"1"]) {
                    self.xl_isMoveButton =YES;
                }
                if ([[temp substringWithRange:NSMakeRange(1, 1)] isEqual:@"1"]) {
                    self.xl_isScaleButton =YES;
                }
                if ([[temp substringWithRange:NSMakeRange(2, 1)] isEqual:@"1"]) {
                    self.xl_isMoveSlider =YES;
                }
            }
        }
    }
    return self;
}
+(instancetype)scrollWithFrame:(CGRect)frame withViews:(NSArray *)views withButtonNames:(NSArray *)names withThreeAnimation:(int)choose{
    return [[self alloc]initWithFrame:frame withViews:views withButtonNames:names withThreeAnimation:choose];
}

-(void)drawRect:(CGRect)rect {
    
    [self addAll];
}
-(void)addAll {
    if ((self.xl_buttonNames.count || self.xl_views.count) && self.xl_buttonNames.count !=self.xl_views.count) {
        UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"XLScroll友情提醒!" message:@"您填写的按钮数与视图数不一致,请仔细检查代码" delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil, nil];
        [alert show];
    }else {
        self.xl_buttonNames =self.xl_buttonNames?self.xl_buttonNames:@[@"田馥甄",@"章晓亮",@"哈哈哈"];
        
        [self addScroll2];
        [self addScroll1];
    }
}
-(void)addScroll1{
    
    
    
    self.scroll1 =[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, screen_width, self.xl_topHeight?self.xl_topHeight:50)];
    
    if (self.xl_buttonNames.count <=5) {
        self.scroll1.contentSize =CGSizeMake(screen_width, 0);
    }else {
        self.scroll1.contentSize =CGSizeMake(screen_width/5*self.xl_buttonNames.count, 0);
    }
    if (self.xl_topBackImage) {
        self.scroll1.backgroundColor =[UIColor clearColor];
        UIImageView *temp =[[UIImageView alloc]initWithFrame:self.scroll1.frame];
        temp.image =self.xl_topBackImage;
        [self insertSubview:temp belowSubview:self.scroll1];
    }else {
        self.scroll1.backgroundColor =self.xl_topBackColor?self.xl_topBackColor:[UIColor lightGrayColor];
    }
    
    self.scroll1.showsHorizontalScrollIndicator =NO;
    self.scroll1.showsVerticalScrollIndicator =NO;
    self.scroll1.bounces =NO;
    self.scroll1.contentOffset=CGPointZero;
    self.scroll1.scrollsToTop =NO;
    
    self.buttons =[NSMutableArray array];
    for (int i =0; i<self.xl_buttonNames.count; i++) {
        UIButton *temp =[UIButton buttonWithType:UIButtonTypeCustom];
        if (self.xl_buttonNames.count <=5) {
            temp.frame =CGRectMake(screen_width/self.xl_buttonNames.count*i, 0, screen_width/self.xl_buttonNames.count, self.xl_topHeight?self.xl_topHeight:50);
        }else {
            temp.frame =CGRectMake(screen_width/5*i, 0, screen_width/5, self.xl_topHeight?self.xl_topHeight:50);
        }
        temp.titleLabel.font =[UIFont systemFontOfSize:self.xl_buttonFont?self.xl_buttonFont:18];
        [temp setTitle:self.xl_buttonNames[i] forState:UIControlStateNormal];
        [temp setTitleColor:self.xl_buttonColorNormal?self.xl_buttonColorNormal:[UIColor blackColor] forState:UIControlStateNormal];
        [temp setTitleColor:self.xl_buttonColorSelected?self.xl_buttonColorSelected:[UIColor whiteColor] forState:UIControlStateSelected];
        if (i == 0) {
            temp.selected =YES;
            [temp setTitleColor:self.xl_buttonColorSelected?self.xl_buttonColorSelected:[UIColor whiteColor] forState:UIControlStateNormal];
        }
        [temp addTarget:self action:@selector(changed:) forControlEvents:UIControlEventTouchUpInside];
        [self.scroll1 addSubview:temp];
        [self.buttons addObject:temp];
    }
    
    CGSize size0 =[self.xl_buttonNames[0] sizeWithAttributes:@{NSFontAttributeName :[UIFont systemFontOfSize:self.xl_buttonFont?self.xl_buttonFont:18]}];
    UIButton *button0 =self.buttons[0];
    _x0 =button0.center.x -size0.width/2;
    self.view2 =[[UIView alloc]initWithFrame:CGRectMake(_x0,CGRectGetMaxY(button0.frame)-(self.xl_buttonToSlider?self.xl_buttonToSlider:10), size0.width, self.xl_sliderHeight?self.xl_sliderHeight:2)];
    self.view2.backgroundColor =self.xl_sliderColor?self.xl_sliderColor:[UIColor colorWithRed:73 / 255.0 green:157 / 255.0 blue:242 / 255.0 alpha:1.0];
    if (self.xl_isSliderCorner) {
        [self.view2.layer setCornerRadius:self.xl_sliderCorner?self.xl_sliderCorner:5];
    }
    //UIImageView *lineView = [[UIImageView alloc] initWithFrame:CGRectMake(0, self.view2.frame.origin.y + 1, screen_width, 1)];
    //lineView.image = [UIImage imageNamed:@"line.png"];
    //[self.scroll1 insertSubview:lineView atIndex:0];
    [self.scroll1 insertSubview:self.view2 atIndex:0];
    
    [self addSubview:self.scroll1];
}

-(void)addScroll2{
    self.scroll2 =[[UIScrollView alloc]initWithFrame:CGRectMake(0, self.xl_topHeight?self.xl_topHeight:50, screen_width, self.frame.size.height -(self.xl_topHeight?self.xl_topHeight:50))];
    self.scroll2.contentOffset=CGPointZero;
    self.scroll2.contentSize=CGSizeMake(screen_width*self.xl_buttonNames.count, 0);
    self.scroll2.showsHorizontalScrollIndicator =NO;
    self.scroll2.showsVerticalScrollIndicator =NO;
    self.scroll2.delegate =self;
    self.scroll2.pagingEnabled =YES;
    self.scroll2.bounces =NO;
    self.scroll2.scrollsToTop =NO;
    
    for (int i =0; i<self.xl_buttonNames.count; i++) {
        
        if (!self.xl_views) {
            UIView *temp =[[UIView alloc]initWithFrame:(CGRect){{screen_width*i, 0},self.scroll2.frame.size}];
            NSArray *cls =@[[UIColor redColor],[UIColor orangeColor],[UIColor yellowColor]];
            temp.backgroundColor =cls[i];
            [self.scroll2 addSubview:temp];
        }else {
            UIView *temp = self.xl_views[i];
            temp.frame =(CGRect){{screen_width*i, 0},self.scroll2.frame.size};
            [self.scroll2 addSubview:temp];
        }
    }
   
    [self addSubview:self.scroll2];
}

-(void)changed:(UIButton *)button{
    
    if (self.xl_isScaleButton) {
        if (!button.selected) {
            [UIView animateWithDuration:0.2 animations:^{
                button.transform =CGAffineTransformScale(button.transform, 0.7, 0.7);
            } completion:^(BOOL finished) {
                [UIView animateWithDuration:0.2 animations:^{
                    button.transform =CGAffineTransformScale(button.transform, 1/0.6, 1/0.6);
                } completion:^(BOOL finished) {
                    [UIView animateWithDuration:0.2 animations:^{
                        button.transform =CGAffineTransformScale(button.transform, 1/0.7*0.6, 1/0.7*0.6);
                    }];
                }];
            }];
        }
    }
    
    for (UIButton *temp in self.buttons) {
        
        if (temp.selected && temp !=button) {
            temp.selected =NO;
        }
        if (temp ==button) {
            [temp setTitleColor:self.xl_buttonColorSelected?self.xl_buttonColorSelected:[UIColor whiteColor] forState:UIControlStateNormal];
        }else {
            [temp setTitleColor:self.xl_buttonColorNormal?self.xl_buttonColorNormal:[UIColor blackColor] forState:UIControlStateNormal];
        }
    }
    button.selected =YES;
    
    self.scroll2.delegate =nil;
    
    if (self.xl_buttonNames.count <=5) {
        self.scroll2.contentOffset =CGPointMake(button.center.x*self.xl_buttonNames.count -screen_width/2, 0);
    }else {
        self.scroll2.contentOffset =CGPointMake(button.center.x*5 -screen_width/2, 0);
    }
    CGSize size =[button.titleLabel.text sizeWithAttributes:@{NSFontAttributeName :[UIFont systemFontOfSize:self.xl_buttonFont?self.xl_buttonFont:18]}];
    if (self.xl_isMoveSlider) {
        [UIView animateWithDuration:0.3 animations:^{
            CGRect rect =self.view2.frame;
            rect.size.width =size.width;
            self.view2.frame =rect;
            self.view2.transform =CGAffineTransformMakeTranslation(button.frame.origin.x +button.frame.size.width/2 -size.width/2 -_x0, 0);
        }];
    }else {
        CGRect rect =self.view2.frame;
        rect.size.width =size.width;
        self.view2.frame =rect;
        self.view2.transform =CGAffineTransformMakeTranslation(button.frame.origin.x +button.frame.size.width/2 -size.width/2 -_x0, 0);
    }
    
    
    self.scroll2.delegate =self;
    
}

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    _x =scrollView.contentOffset.x/screen_width;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    UIButton *button =self.buttons[_x];
    [button setTitleColor:self.xl_buttonColorNormal?self.xl_buttonColorNormal:[UIColor blackColor] forState:UIControlStateNormal];
    
    CGPoint point=self.scroll2.contentOffset;
    point.y =0;
    self.scroll2.contentOffset =point;
    
    if (self.xl_isMoveButton) {
        if (self.xl_buttonNames.count <=5) {
            button.transform =CGAffineTransformMakeTranslation((scrollView.contentOffset.x -button.frame.size.width*self.xl_buttonNames.count*_x)/self.xl_buttonNames.count/3, 0);
            self.view2.transform =CGAffineTransformMakeTranslation(scrollView.contentOffset.x/self.xl_buttonNames.count, 0);
        }else {
            button.transform =CGAffineTransformMakeTranslation((scrollView.contentOffset.x -button.frame.size.width*5*_x)/5/3, 0);
            self.view2.transform =CGAffineTransformMakeTranslation(scrollView.contentOffset.x/5, 0);
        }
    }else {
        if (self.xl_buttonNames.count <=5) {
            self.view2.transform =CGAffineTransformMakeTranslation(scrollView.contentOffset.x/self.xl_buttonNames.count, 0);
        }else {
            self.view2.transform =CGAffineTransformMakeTranslation(scrollView.contentOffset.x/5, 0);
        }
    }
}

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    
    
    for (UIButton *temp in self.buttons) {
        
        [UIView animateWithDuration:0.2 animations:^{
            
            temp.transform =CGAffineTransformMakeTranslation(0, 0);
        }];
        
        if (temp.selected) {
            temp.selected =NO;
        }
        
        int x1 =temp.frame.origin.x;
        int x2 =0;
        if (self.xl_buttonNames.count <=5) {
            x2 =scrollView.contentOffset.x/self.xl_buttonNames.count;
        }else {
            x2 =scrollView.contentOffset.x/5;
        }
        
        
        if (x1 == x2) {
            
            temp.selected =YES;
            [temp setTitleColor:self.xl_buttonColorSelected?self.xl_buttonColorSelected:[UIColor whiteColor] forState:UIControlStateNormal];
            
            CGSize size =[temp.titleLabel.text sizeWithAttributes:@{NSFontAttributeName :[UIFont systemFontOfSize:self.xl_buttonFont?self.xl_buttonFont:18]}];
            [UIView animateWithDuration:0.2 animations:^{
                CGRect rect =self.view2.frame;
                rect.size.width =size.width;
                self.view2.frame =rect;
                self.view2.transform =CGAffineTransformMakeTranslation(temp.frame.origin.x +temp.frame.size.width/2 -size.width/2 -_x0, 0);
            }];
        }
    }
    
    if (self.buttons.count >5) {
        UIButton *button =self.buttons[_x];
        int xAfter =scrollView.contentOffset.x/screen_width;
        if (_x<xAfter) {
            
            if (_x>=2 && _x<=self.xl_buttonNames.count-4 ) {
                [UIView animateWithDuration:0.2 animations:^{
                    self.scroll1.contentOffset =CGPointMake(button.center.x -screen_width/5*1.5, 0);
                }];
            }
            if ((self.buttons.count ==6)|7 &&_x>3) {
                if ((_x ==4)|5) {
                    [UIView animateWithDuration:0.2 animations:^{
                        self.scroll1.contentOffset =CGPointMake(button.frame.size.width*(self.buttons.count==7?2:1), 0);
                    }];
                }
            }
        }else if (_x>xAfter) {
            
            if (_x>=3 && _x<=self.xl_buttonNames.count-2 ) {
                [UIView animateWithDuration:0.2 animations:^{
                    self.scroll1.contentOffset =CGPointMake(button.center.x -screen_width/5*3.5, 0);
                }];
            }
            if ((self.buttons.count ==6)|7 &&_x<3) {
                if ((_x ==1)|2) {
                    [UIView animateWithDuration:0.2 animations:^{
                        self.scroll1.contentOffset =CGPointMake(0, 0);
                    }];
                }
            }
        }
    }
    
}

@end

出处 https://www.cnblogs.com/chasonCH/p/5390893.html

上一篇:Netty4.x 源码实战系列(一): 深入理解ServerBootstrap 与 Bootstrap


下一篇:汇编下的i++与++i