今天我们学习的是UISlider,就是平时看视频听音乐等的进度条的设置
今天设置的slider是控制播放一组图片速度的例子:
1.初始化以及设置一些属性
// 初始化
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(50, 50, 300, 30)];
// 设置背景色
slider.backgroundColor = [UIColor grayColor];
// 设置最小值轨迹颜色
[slider setMinimumTrackTintColor:[UIColor greenColor]];
// 设置最大值轨迹颜色
[slider setMaximumTrackTintColor:[UIColor purpleColor]];
// 设置拖动按钮颜色
[slider setThumbTintColor:[UIColor brownColor]];
// 设置图片
[slider setMinimumValueImage:[UIImage imageNamed:@"01-refresh"]];
[slider setMaximumValueImage:[UIImage imageNamed:@"03-loopback"]];
[slider setThumbImage:[UIImage imageNamed:@"01-refresh"] forState:UIControlStateNormal];
[slider setThumbImage:[UIImage imageNamed:@"02-redo"] forState:UIControlStateHighlighted];
[slider setThumbImage:[UIImage imageNamed:@"03-loopback"] forState:UIControlStateSelected];
// 设置滑块的初值 最大值 最小值
// 如果想设置初始位置 需要先把最大 最小值设置上
// 再给初值 才会发生变化
slider.minimumValue = 0;
slider.maximumValue = 10;
slider.value = 10;
2.添加滑动事件(重要的,需要通过添加事件来关联)
[slider addTarget:self action:@selector(sliderClick:) forControlEvents:UIControlEventValueChanged];
事件的实现(预先添加了图片,然后设置播放完一组照片的时间为slider的值来联系起来)
- (void)sliderClick:(UISlider *)slider
{
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:1000];
if (slider.value == slider.maximumValue) {
// 为了美观 停止的时候 添加一张占位图
[imageView stopAnimating];
imageView.image = [UIImage imageNamed:@"005.jpg"];
}else{
// 把播放玩一组照片的时间与slider的值联系起来
imageView.animationDuration = slider.value;
[imageView startAnimating];
}
}
3.设置一组图片动画
// imageView
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 500)];
imageView.backgroundColor = [UIColor purpleColor];
imageView.tag = 1000;
[self.view addSubview:imageView];
[imageView release];
// 构建一个图片的数组
NSMutableArray *arr = [NSMutableArray array];
for (int i = 1; i <= 10; i++) {
// 把图片的名字拼接出来
NSString *imageName = [NSString stringWithFormat:@"%d.jpg",i];
// 初始化每一张图片
UIImage *image = [UIImage imageNamed:imageName];
// 把图片添加到数组里
[arr addObject:image];
}
// 设置imageView的播放动画的数组
imageView.animationImages = arr;
// 设置时间间隔(播放完整一次10秒)
imageView.animationDuration = 10;
// 设置重复次数(零代表无限次)
imageView.animationRepeatCount = 0;
// 让动画开始
[imageView startAnimating];
}
最后一个是倒计时的实例:
点击一个发送验证码的按钮进行倒计时
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(100, 100, 100, 100);
button.backgroundColor = [UIColor purpleColor];
button.tag = 100;
[button setTitle:@"发送验证码" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
// 设置倒计时初值
self.number = 5;
}
- (void)buttonClick:(UIButton *)button
{
// 倒计时核心 每隔 一秒钟 时间递减
// 计时器(每隔多少时间 调用一个方法)
// (NSTimeInterval) 代表时间间隔
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:@"button倒计时" repeats:YES];
// 计时器开始
[timer fire];
button.userInteractionEnabled = NO;
}
- (void)timerAction:(NSTimer *)timer
{
// 改button的标题
UIButton *button = (UIButton *)[self.view viewWithTag:100];
NSString *buttonTitle = [NSString stringWithFormat:@"%ld",self.number--];
[button setTitle:buttonTitle forState:UIControlStateNormal];
// 判断倒计时是否结束(标题是否为0)
if ([[button titleForState:UIControlStateNormal] isEqualToString:@"0"]) {
// 停止计时器
[timer invalidate];
// 更改标题
[button setTitle:@"发送验证码" forState:UIControlStateNormal];
// 打开交互
button.userInteractionEnabled = YES;
// 重置时间
self.number = 5;
}
}