转自:http://www.jb51.net/article/86248.htm 感谢作者提供,本宝宝用作笔记
创建:
UISlider* mySlider = [ [ UISlider alloc ] initWithFrame:CGRectMake(20.0,10.0,200.0,0.0) ];//高度设为0就好
设置滑动范围:
ps:默认的 0.0 到 1.0 之间的值
mySlider.mininumValue = 0.0;//下限
mySlider.maxinumValue = 50.0;//上限
设置默认值:
mySlider.value = 22.0;
两端添加图片:
// slider.minimumTrackTintColor = [UIColor greenColor]; //滑轮左边颜色,如果设置了左边的图片就不会显示
// slider.maximumTrackTintColor = [UIColor redColor]; //滑轮右边颜色,如果设置了右边的图片就不会显示
// slider.thumbTintColor = [UIColor redColor];//设置了滑轮的颜色,如果设置了滑轮的样式图片就不会显示
ps:滑块可以在任何一段显示图像。添加图像后会导致滑动条缩短,所以记得要记得在创建的时候增加滑块的宽度来适应图像。
[ mySlider setMininumTrackImage: [ UIImage applicationImageNamed:@"min.png" ] forState: UIControlStateNormal ];
[ mySlider setMaxinumTrackImage: [ UIImage applicationImageNamed:@"max.png" ] forState: UIControlStateNormal ];
ps:你可以根据滑块的各种不同状态显示不同的图像。下面是可用状态:
UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateDisabled
UIControlStateSelected
读取值:
float value = mySlider.value;
通知:(添加方法)
[ mySlider addTarget:self action:@selector(sliderValueChanged:) forControlEventValueChanged ];
ps: 只要滑块停放(注意是停放,如果要在拖动中也触发,请看后文)到新的位置,你的动作方法就会被调用
代码如下:
- (void) sliderValueChanged:(id)sender{
UISlider* control = (UISlider)sender;
if(control == mySlider){
float value = control.value;
/ 添加自己的处理代码 */
}
}
ps:如果要在拖动中也触发,需要设置滑块的 continuos 属性:
mySlider.continuous = YES ;
UISlider两边有空隙的解决方法:(比如音乐播放器进度条两遍空白)
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value{
rect.origin.x = rect.origin.x - 10 ;
rect.size.width = rect.size.width +20;
return CGRectInset ([super thumbRectForBounds:bounds trackRect:rect value:value], 10 , 10);
}
ps:当然UISlider还有这么几个方法可以重写:
-(CGRect)trackRectForBounds:(CGRect)bounds{
bounds.origin.x=15;
bounds.origin.y=bounds.size.height/3;
bounds.size.height=bounds.size.height/5;
bounds.size.width=bounds.size.width-30;
return bounds;
}
- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds;
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds;