一、创建

滑块是一个标准的UIControl。我们可以通过代码创建,如同开关(UISwitch)的宽与高都会被忽略一样滑块的高也会被忽略(但是宽度不会):

1. UISlider* mySlider = [ [ UISlider alloc ] initWithFrame:CGRectMake(20.0,10.0,200.0,0.0) ];//高度设为0就好

二、设定范围与默认值

创建完毕的同时我们要设置好滑块的范围,如果你没有设置,那么会使用默认的 0.0 到 1.0 之间的值。UISlider提供了两个属性来设置范围:mininumValue 和 maxinumValue:

1. mySlider.mininumValue = 0.0;//下限
2. mySlider.maxinumValue = 50.0;//上限

 同时你也可以为滑块设定一个默认值:

  1. mySlider.value = 22.0;  

三、两端添加图片

滑块可以在任何一段显示图像。添加图像后会导致滑动条缩短,所以记得要记得在创建的时候增加滑块的宽度来适应图像。

1. [ mySlider setMininumTrackImage: [ UIImage applicationImageNamed:@"min.png"
2. [ mySlider setMaxinumTrackImage: [ UIImage applicationImageNamed:@"max.png"

 你可以根据滑块的各种不同状态显示不同的图像。下面是可用状态:

UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateDisabled
UIControlStateSelected

四、显示控件

1. [ parentView addSubview:myslider ];//添加到父视图
2. 或  
3. [ self.navigationItem.titleView addSubview:myslider ];//添加到导航栏

五、读取控件值

  1. float

六、通知

要想在滑块值改变时收到通知,可以用UIControl类的addTarget方法为UIControlEventValueChanged事件添加一个动作。

  1. [ mySlider addTarget:self action:@selector(sliderValueChanged:) forControlEventValueChanged ];  

 只要滑块停放(注意是停放,如果要在拖动中也触发,请看后文)到新的位置,你的动作方法就会被调用:

- (void) sliderValueChanged:(id)sender
{        UISlider* control = (UISlider*)sender;  
 if(control == mySlider)
{  
1. float
2. /* 添加自己的处理代码 */
3.          }  
4. }

 如果要在拖动中也触发,需要设置滑块的 continuos 属性:

  1. mySlider.continuous = YES ;  

调整UIslider的step,也就是UIslider的间隔:

- (void)viewDidLoad
{
    // Set up the array with your numbers.
NSMutableArray
NSNumber numberWithInt:-3]];
NSNumber numberWithInt:0]];
NSNumber numberWithInt:2]];
NSNumber numberWithInt:4]];
NSNumber numberWithInt:7]];
NSNumber numberWithInt:10]];
NSNumber numberWithInt:12]];

    slider.continuous = YES; // Make the slider 'stick' as it is moved.
0];
float)[numbers count] - 1)];

    // This makes the slider call the -valueChanged: method when the user interacts with it.
    [slider addTarget:self
@selector(valueChanged:) 
     forControlEvents:UIControlEventValueChanged];
    [super viewDidLoad];
}

- (void)valueChanged:(UISlider*)sender
{
NSUInteger index = (NSUInteger)(slider.value + 0.5); // Round the number.
    [slider setValue:index animated:NO];
NSLog(@"index: %i", index);
//UIslider被平均分成[number count]-1份,UISlider每跳动一次相应的从数组中取值
NSNumber *number = [numbers objectAtIndex:index]; // <-- This is the number you want.
NSLog(@"number: %@", number);
}

这个通知最简单的一个实例就是实时显示滑块的值,很奇怪的苹果显示滑块的值是一个私有的API(setShowValue),私有就私有,大不了我不用就是。我们可以用一个UILabel来显示值,在每次触发上面的方法时改变label的值,不就可以实时显示了吗?当然我们可以做的不仅仅是这个,还有更多的 cool 事情可以去实现,就看你的手段与想象力了。