您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何實現(xiàn)iOS自定義步驟進度條的案例的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
前言
最近新項目要做入駐功能,其中包括一個入住流程,類似登錄或者注冊流程如下圖。
之前想著用自己繪圖來做,可是又懶不想多寫代碼,所以就想著能不能用進度條來做。
實現(xiàn)方法如下:
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 大于總數(shù)為總數(shù) _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=@[@"區(qū)寶時尚",@"區(qū)寶時尚",@"時尚",@"區(qū)寶時尚",@"時尚"]; 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,原來數(shù)組的count返回的是NSUInteger而stepIndex是NSInteger類型,所以需要強制轉(zhuǎn)換一下
stepIndex=stepIndex<-1?-1:stepIndex; _stepIndex = stepIndex >= (NSInteger)(_imgBtnArray.count-1) ? _imgBtnArray.count-1:stepIndex;
感謝各位的閱讀!關于“如何實現(xiàn)iOS自定義步驟進度條的案例”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。