博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 自定义步骤进度条
阅读量:7103 次
发布时间:2019-06-28

本文共 3028 字,大约阅读时间需要 10 分钟。

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

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

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 
@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
=_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];

 

 补充:上面的代码有一个bug,例如stepIndex=-1时,_stepIndex=并不等-1,原来数组的count返回的是NSUInteger而stepIndex是NSInteger类型,所以需要强制转换一下

stepIndex=stepIndex<-1?-1:stepIndex;    _stepIndex = stepIndex >= (NSInteger)(_imgBtnArray.count-1) ? _imgBtnArray.count-1:stepIndex;

 

转载地址:http://qgdhl.baihongyu.com/

你可能感兴趣的文章
jquery自动焦点图
查看>>
网络传输机制
查看>>
【HDOJ】1057 A New Growth Industry
查看>>
在windows和unbuntu上安装octave
查看>>
codeforces727F Polycarp's problems(dp)
查看>>
Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
查看>>
做WinForm项目时遇到的一个问题,MessageBox不从用户控件那一层弹出
查看>>
与正则有关的JS方法结合其在项目中的应用
查看>>
CentOS 7.6最小化安装(系统盘和数据盘分离安装)
查看>>
从零开始编写自己的C#框架(8)——后台管理系统功能设计
查看>>
C#编程(三十一)----------泛型总结
查看>>
入门:在ubuntu中安装Nessus漏洞扫描器
查看>>
TT模板的作用及使用
查看>>
Android 内核--Binder架构分析
查看>>
CSS background-attachment属性三种值
查看>>
Appserv配置多站点访问
查看>>
java 工具中json的使用
查看>>
javaScript有哪些数据类型
查看>>
ORACLE取周、月、季、年的開始时间和结束时间
查看>>
android动画介绍之 自己定义Animation动画实现qq抖一抖效果
查看>>