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"
;
@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(, , frame.size.width, )];
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);
; 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/+_btnWidth*i-imgBtnWidth/, , imgBtnWidth, imgBtnWidth);
btn.selected=YES;
[stepProgressView addSubview:btn];
[stepProgressView.imgBtnArray addObject:btn];
//文字
UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(btn.center.x-_btnWidth/, frame.size.height-, _btnWidth, )];
titleLabel.text=[titleArray objectAtIndex:i];
[titleLabel setTextColor:[UIColor blackColor]];
titleLabel.textAlignment=NSTextAlignmentCenter;
titleLabel.font=[UIFont systemFontOfSize:];
[stepProgressView addSubview:titleLabel];
}
stepProgressView.stepIndex=-;
return stepProgressView;
}
-(void)setStepIndex:(NSInteger)stepIndex
{
// 默认为-1 小于-1为-1 大于总数为总数
_stepIndex=stepIndex<-?-:stepIndex;
_stepIndex=stepIndex >=_imgBtnArray.count-?_imgBtnArray.count-:stepIndex;
float _btnWidth=self.bounds.size.width/(_imgBtnArray.count);
; i<_imgBtnArray.count; i++) {
UIButton *btn=[_imgBtnArray objectAtIndex:i];
if (i<=_stepIndex) {
btn.selected=YES;
}
else{
btn.selected=NO;
}
}
) {
self.progressView.progress=0.0;
}
)
{
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(, , self.view.bounds.size.width, ) withTitleArray:arr];
stepView.stepIndex=;
[self.view addSubview:stepView];

补充:上面的代码有一个bug,例如stepIndex=-1时,_stepIndex=并不等-1,原来数组的count返回的是NSUInteger而stepIndex是NSInteger类型,所以需要强制转换一下
stepIndex=stepIndex<-?-:stepIndex;
_stepIndex = stepIndex >= (NSInteger)(_imgBtnArray.count-) ? _imgBtnArray.count-:stepIndex;
iOS 自定义步骤进度条的更多相关文章
- Xamarin iOS教程之进度条和滚动视图
Xamarin iOS教程之进度条和滚动视图 Xamarin iOS 进度条 进度条可以看到每一项任务现在的状态.例如在下载的应用程序中有进度条,用户可以很方便的看到当前程序下载了多少,还剩下多少.Q ...
- 自定义环形进度条RoundProgressBar
一.效果图: Canvas画圆环说明: 圆环宽度不必在意,只是画笔宽度设置后达到的效果. 二.实现步骤 1.自定义View-RoundProgressBar 2.设置属性resources(decle ...
- 步骤进度条 css
用css写一个简单的步骤进度条 html代码: <h4>南京游玩</h4> <ul class="step-list"> <li> ...
- Android 自定义水平进度条的圆角进度
有时项目中需要实现水平圆角进度,如下两种,其实很简单 下面开始看代码,先从主界面布局开始看起: <?xml version="1.0" encoding=" ...
- iOS开发:代码通用性以及其规范 第一篇(附带,自定义UITextView\进度条\双表显示\瀑布流 代码设计思路)
在iOS团队开发中,我见过一些人的代码,也修改过他们的代码.有的人的代码写的非常之规范.通用,几乎不用交流,就可以知道如何修改以及在它基础上扩展延生.有的人的代码写的很垃圾,一眼看过去,简直会怀疑自己 ...
- 自定义带进度条的WebView , 增加获取web标题和url 回掉
1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graph ...
- 【Android 应用开发】 自定义 圆形进度条 组件
转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...
- ProgressBar学习笔记,自定义横向进度条的样式(包含ActionBar上面的进度条)
点显示进度条后→ android:max="100" 进度条的最大值 android:progress 进度条已经完成的进度值 android:progressDrawab ...
- android新闻项目、饮食助手、下拉刷新、自定义View进度条、ReactNative阅读器等源码
Android精选源码 Android仿照36Kr官方新闻项目课程源码 一个优雅美观的下拉刷新布局,众多样式可选 安卓版本的VegaScroll滚动布局 android物流详情的弹框 健身饮食记录助手 ...
随机推荐
- NETCore 同步AD域组织和用户
BitAdminCore为没有自主开发框架的小团队,提供快速项目搭建及开发能力. 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxi ...
- WPF相关资料集锦
微软官方资料 .NET Framework源代码 https://referencesource.microsoft.com/ 微软官方文档 https://docs.microsoft.com/en ...
- 将实体转换为Hashtable
1.将实体转换为Hashtable,用于将实体参数处理为hashtable,方便sql参数传递 /// <summary> /// 将实体转换为Hashtable /// </sum ...
- 使用Anaconda的python安装虚拟环境是出现错误:python -m venv venvdir----Error: Command '['D:\\Development\\Django\\test\\Scripts\\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit
在创建python虚拟环境的时候,如果使用的是Anaconda中集成的python -m venv venvdir就会出现不能安装pip的错误,原因是Anaconda没有ensurepip, 解决办法 ...
- SpringMVC 的映射
27.1.1 @RequestMapping使用 之前,我们是把@RequestMapping注解放在方法之上,用来给方法绑定一个请求映射.除此以外,@RequestMapping注解还可以放在类的上 ...
- java中二维数组遍历
public class Demoshuzu2 { public static void main(String[] args) { int[][] arr2 = {{78,79,65, ...
- SQL Server 根据树状结构表生成以/号分割的路由字符串
很多情况下,我们有必要把树形结构进行数据梳理.比如,要方便的过滤出一个父节点下的所有子节点等等... 这个时候,我们可以生成一个路径表字符串,在应用时只需要对该字符串进行索引即可达成目的. 目标:按图 ...
- leecode刷题(22)-- 反转数组
leecode刷题(22)-- 反转数组 反转数组 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3-> ...
- 洛谷P4069 [SDOI2016]游戏(李超线段树)
题面 传送门 题解 如果我们把路径拆成两段,那么这个路径加可以看成是一个一次函数 具体来说,设\(dis_u\)表示节点\(u\)到根节点的距离,那么\((x,lca)\)这条路径上每个节点的权值就会 ...
- IT男装逼利器:如何像黑客一样聊天 Mojo-Webqq
电影里的黑客们聊天不想我们生活中的一样,用QQ.微信的客户端,都是通过命令行来进行聊天交流的,大概是为了提升逼格吧.(文末有福利~) 本文作者:KevinSVIP 今天发现一个有趣的项目:使用mojo ...