自定义UISlider

自定义UISlider

 iOS  Bear   1年前 (2015-03-12)   1923浏览   0评论

iOS的Slider控件可是常用的,在各种视频播放器,音乐播放器,图片查看器还有地图这些软件中可是非常常见的。
屏幕快照 2015-03-12 下午11.30.35
这是Xcode里自带的slider控件。但是很多情况下我们是需要对slider的外观根据需要进行调整,所以就会对slider进行自定义。
比如我们想把slider做成如下效果
屏幕快照 2015-03-13 上午12.31.56
来分析下这个图,slider有背景图,左侧划过的颜色和右侧没有划过的颜色不同的,关键是横条上面还悬浮着一列白点。这堆白点比较麻烦,当时花了我不少功夫,才突然想起来一中方法。待会代码会有提及。设置尺寸什么的我就不详说了。直接上代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
- ( void )viewDidLoad {
     [ super viewDidLoad];
     
     #pragma mark 设置滑动条
     
     //时间滑动条参数准备
     CGFloat slider_w = ScreenWidth * 0.95;
     CGFloat slider_h = 70;
     CGFloat slider_offX = (ScreenWidth - slider_w)/2;
     CGFloat slider_offY = 20;
     CGFloat slider_deltaX = slider_w * 0.09; //slider的校正x值
     
     //滑动条
     UISlider *timeSlider = [[UISlider alloc] initWithFrame:CGRectMake(slider_offX + slider_deltaX, CGRectGetHeight( self .view.bounds) - slider_offY - slider_h - 3, slider_w - 2 * slider_deltaX, slider_h)];
     //滑动条的背景图
     UIImageView *sliderBgV = [[UIImageView alloc] initWithFrame:CGRectMake(slider_offX, CGRectGetHeight( self .view.bounds) - slider_offY - slider_h, slider_w, slider_h)];
     sliderBgV.image = [UIImage imageNamed: @"progress_bg" ];
     [ self .view addSubview:sliderBgV];
     [ self .view addSubview:timeSlider];
     
     //设置滑动条
     timeSlider.minimumValue = 0;
     timeSlider.maximumValue = 24;
     timeSlider.value = 5;
     //设置滚动条左侧和右侧不同的颜色
     [timeSlider setMaximumTrackImage:[UIImage imageNamed: @"progress_right" ] forState:UIControlStateNormal];
     [timeSlider setMinimumTrackImage:[UIImage imageNamed: @"progress_left" ] forState:UIControlStateNormal];
     [timeSlider setThumbImage:[UIImage imageNamed: @"progress_point" ] forState:UIControlStateNormal];
     [timeSlider setThumbImage:[UIImage imageNamed: @"progress_point" ] forState:UIControlStateHighlighted];
     
     //画点的参数准备
     int point_w = 6;
     int point_dis = 20; //点间距
     int point_offX = 10;
     int point_num = CGRectGetWidth(timeSlider.bounds)/point_dis;
     
     //注意!!!这里背景View的高度为0是重点
     //点的背景view,注:高度为0,防止干扰slider,并且可以悬浮在中间的精度条上
     UIView *pointBgV = [[UIView alloc] initWithFrame:CGRectMake(slider_offX + slider_deltaX, CGRectGetHeight( self .view.bounds) - slider_offY - slider_h - 3, CGRectGetWidth(timeSlider.bounds), 0)];
     pointBgV.backgroundColor = [UIColor blackColor];
     [ self .view addSubview:pointBgV];
     //画点
     for ( int i = 0; i < point_num; i ++) {
         UIImageView *pointImg = [[UIImageView alloc] initWithFrame:CGRectMake(point_offX + i * point_dis, 0, point_w, point_w)];
         pointImg.image = [UIImage imageNamed: @"progress_dot" ];
         pointImg.center = CGPointMake(pointImg.center.x, CGRectGetHeight(sliderBgV.bounds)/2);
         [pointBgV addSubview:pointImg];
     }
}

我们来看下运行效果
slider

最后,奉上demo
sliderTest

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值