转载

iOS 自定义步骤进度条

新项目要做入驻功能,其中包括一个入住流程,类似登录或者注册流程如下图。

iOS 自定义步骤进度条

之前想着用自己绘图来做,可是又懒不想多写代码,所以就想着能不能用进度条来做。

1.用进度条做的首先要解决的是进度条的高度问题,可以通过仿射变换来扩大高度。

 progressView.transform = CGAffineTransformMakeScale(1.0f,2.0f); 

2.用进度条要设置进度progress要与按钮对应

通过步骤的索引来改变进度的值和按钮的图片。由于按钮的左右有间隔所以要注意-1、0和最后一个的progress值。

3.扩展

看有一些类似查公交、车站运行的APP有的可以点击站点,所以就用按钮来做,这样可以扩展。

4.代码

 // //  StepProgressView.h //  CustomProgress // //  Created by City--Online on 15/12/12. //  Copyright © 2015年 City--Online. All rights reserved. //  #import <UIKit/UIKit.h>  @interface StepProgressView : UIView  @property (nonatomic,assign) NSInteger stepIndex;  +(instancetype)progressViewFrame:(CGRect)frame withTitleArray:(NSArray *)titleArray;  @end 
 // //  StepProgressView.m //  CustomProgress // //  Created by City--Online on 15/12/12. //  Copyright © 2015年 City--Online. All rights reserved. //  #import "StepProgressView.h"  static const float imgBtnWidth=18;  @interface StepProgressView ()  @property (nonatomic,strong) UIProgressView *progressView;  //用UIButton防止以后有点击事件 @property (nonatomic,strong) NSMutableArray *imgBtnArray;  @end  @implementation StepProgressView  +(instancetype)progressViewFrame:(CGRect)frame withTitleArray:(NSArray *)titleArray {     StepProgressView *stepProgressView=[[StepProgressView alloc]initWithFrame:frame];     //进度条     stepProgressView.progressView=[[UIProgressView alloc]initWithFrame:CGRectMake(0, 5, frame.size.width, 10)];     stepProgressView.progressView.progressViewStyle=UIProgressViewStyleBar;     stepProgressView.progressView.transform = CGAffineTransformMakeScale(1.0f,2.0f);     stepProgressView.progressView.progressTintColor=[UIColor redColor];     stepProgressView.progressView.trackTintColor=[UIColor blueColor];     stepProgressView.progressView.progress=0.5;     [stepProgressView addSubview:stepProgressView.progressView];              stepProgressView.imgBtnArray=[[NSMutableArray alloc]init];     float _btnWidth=frame.size.width/(titleArray.count);     for (int i=0; i<titleArray.count; i++) {          //图片按钮         UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];         [btn setImage:[UIImage imageNamed:@"0.png"] forState:UIControlStateNormal];         [btn setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateSelected];         btn.frame=CGRectMake(_btnWidth/2+_btnWidth*i-imgBtnWidth/2, 0, imgBtnWidth, imgBtnWidth);         btn.selected=YES;                  [stepProgressView addSubview:btn];         [stepProgressView.imgBtnArray addObject:btn];                  //文字         UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(btn.center.x-_btnWidth/2, frame.size.height-20, _btnWidth, 20)];         titleLabel.text=[titleArray objectAtIndex:i];         [titleLabel setTextColor:[UIColor blackColor]];         titleLabel.textAlignment=NSTextAlignmentCenter;         titleLabel.font=[UIFont systemFontOfSize:18];         [stepProgressView addSubview:titleLabel];     }     stepProgressView.stepIndex=-1;     return stepProgressView;      } -(void)setStepIndex:(NSInteger)stepIndex { //  默认为-1 小于-1为-1 大于总数为总数     _stepIndex=stepIndex<-1?-1:stepIndex;     _stepIndex=stepIndex >=_imgBtnArray.count-1?_imgBtnArray.count-1:stepIndex;     float _btnWidth=self.bounds.size.width/(_imgBtnArray.count);     for (int i=0; i<_imgBtnArray.count; i++) {         UIButton *btn=[_imgBtnArray objectAtIndex:i];         if (i<=_stepIndex) {            btn.selected=YES;         }         else{             btn.selected=NO;         }     }     if (_stepIndex==-1) {         self.progressView.progress=0.0;     }     else if (_stepIndex==_imgBtnArray.count-1)     {         self.progressView.progress=1.0;     }     else     {         self.progressView.progress=(0.5+_stepIndex)*_btnWidth/self.frame.size.width;     } }  @end 

5.使用和效果

 NSArray *arr=@[@"区宝时尚",@"区宝时尚",@"时尚",@"区宝时尚",@"时尚"];     StepProgressView *stepView=[StepProgressView progressViewFrame:CGRectMake(0, 100, self.view.bounds.size.width, 60) withTitleArray:arr];     stepView.stepIndex=2;     [self.view addSubview:stepView]; 

iOS 自定义步骤进度条

正文到此结束
Loading...