转载

Slider 和 ProgressView 初步使用

HELLO 我是(@孙占兴) 欢迎来到我的窝: http://www.teilim.com 转载请标明原文地址 ^_^

通过滑块选择进度条索完成的时间,时间越短进度条完成的越快,通过按钮控制状态,对 Slider 和 ProgressView 的初步使用。

先看一下最终的效果图:

Slider 和 ProgressView 初步使用

首先在 Main.storyboard 中添加 Slider、ProgressView 两个控件,三个 Label ,和一个 Button 控件。

接下来在程序中创建相关的变量,通过拖线与相关的控件进行关联。

@property (weak, nonatomic) IBOutlet UISlider *sliderView; // 滑块 @property (weak, nonatomic) IBOutlet UIProgressView *ProgressView; // 进度条 @property (weak, nonatomic) IBOutlet UILabel *timeLabel; // 获取时间 @property (weak, nonatomic) IBOutlet UILabel *percentLabel; // 进度条速率 @property (weak, nonatomic) IBOutlet UIButton *button; // 按钮 @property (assign, nonatomic) NSTimer *progressTime; // 定时器 @property (assign, nonatomic) int time; // 计算时间 

声明的NSTime是时间定时器,这里需要靠它来控制程序,分别将上面定义的变量与控件相关联:sliderView 与 Slider 、ProgressView 与 ProgressView 、timeLabel 与 '调节滑块获取时间' 、percentLabel 与 '0%~100%' 、button 与 Button,一一对应。

我们现在要定义三个函数,两个控件函数,一个无返回值函数,并在其中进行获取数值和实现功能。

- (void)start; // 计算定时器所累计数值 - (IBAction)action:(id)sender; // 监控按钮状态 - (IBAction)slideChange:(id)sender; // 计算滑块所用完成时间 

当程序启动时,会让我们自己通过滑块给一个当前进度条完成一个时间的限制,并且要在我们给定的时间内完成,具体操作在下面的方法中实现。

- (IBAction)slideChange:(id)sender {     self.time = (int)((10 - 0) * self.sliderView.value);      self.timeLabel.text = [NSString stringWithFormat:@"%d秒",self.time];  } 

根据自己的需求给滑块一个取值的范围,此处的范围是(0 ~ 10),强制转化为 int 类型,赋值给_time。将 _time转化成字符串,赋值给关联好的 timeLabel的text,显示在屏幕上。

在 start 函数中,我们将处理进度条的叠加状态,从而让它'跑起来'。

- (void)start {     self.ProgressView.progress += 1.0 / self.time;     self.percentLabel.text = [NSString stringWithFormat:@"%%%d",(int)(self.ProgressView.progress * 100)];     if(self.ProgressView.progress >= 1)     {         [self.button setTitle:@"完成"    forState:UIControlStateNormal];         [self.progressTime invalidate];         self.progressTime = nil;     } } 

控制器获取 ProgressView 控件中 progress属性,将获取的时间处理,并且在第二次调用时进行叠加。将处理好的 progress 进行处理赋值给关联的 percentLabel 控件中 text 属性,显示在屏幕上。

现在我们要更新按钮的状态,不能让它在'跑完'的时候还是'开始'、'暂停'、'继续'的状态,故要进行判断,如果此时的进度条数值大于或等于1时,需将按钮状态更新为‘完成’,并且关闭定时器,将定时器清空。

时间已经根据我们上面的需求获取好了,我们要开始让进度条走起来了,但是怎么让听我们的话呢?让它'走就走、停就停呢?' 在这里还要通过一个定时器来控制,从而达到我们的需求。

- (void)action:(id)sender {     if(!self.progressTime)     {         [self.button setTitle:@"暂停" forState:UIControlStateNormal];         self.progressTime = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(start) userInfo:nil repeats:YES];         [self.progressTime fire];     }     else     {         [self.button setTitle:@"继续" forState:UIControlStateNormal];         [self.progressTime invalidate];         self.progressTime = nil;     } } 

通过 progressTime 是否为 nil 来判断定时器是否已经处于开启状态,如果当前定时器没有打开,那么按钮状态更新为'暂停',并开启定时器。如果已经开始,那么关闭定时器,并把按钮状态更新为'继续'。

正文到此结束
Loading...