iOS中的UISlider滑块组件用法总结

 更新时间:2016年06月09日 09:27:32   作者:ian  
不仅是滑动开关,UISlider组件也是常用的进度条制作工具,这里我们就一起来看一下iOS中的UISlider滑块组件用法总结,需要的朋友可以参考下

PC上的滑块是很丑陋的,因为我们只能通过鼠标去拖动他。不过当Jobs把它移植到IOS上时一切变得酷起来,因为我们可以通过手指去拖动它,这种感觉是很妙的。
滑块为用户提供了一种可见的做范围调整的方法,用户可以通过拖动一个滑动条改变它的值,并且可以对其配置以合适不同值域。你可以设置滑块值的范围,也可以在两端加上图片,以及进行各种调整让它更美观。滑块非常适合用于表示在很大范围(但不精确)的数值中进行选择,比如音量设置、灵敏度控制等诸如此类的用途。
一、创建
滑块是一个标准的UIControl。我们可以通过代码创建,如同开关(UISwitch)的宽与高都会被忽略一样滑块的高也会被忽略(但是宽度不会):

复制代码 代码如下:

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

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

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

同时你也可以为滑块设定一个默认值:
复制代码 代码如下:

mySlider.value = 22.0; 

三、两端添加图片
滑块可以在任何一段显示图像。添加图像后会导致滑动条缩短,所以记得要记得在创建的时候增加滑块的宽度来适应图像。
复制代码 代码如下:

[ mySlider setMininumTrackImage: [ UIImage applicationImageNamed:@"min.png" ] forState: UIControlStateNormal ]; 
[ mySlider setMaxinumTrackImage: [ UIImage applicationImageNamed:@"max.png" ] forState: UIControlStateNormal ]; 

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

UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateDisabled
UIControlStateSelected

四、显示控件
复制代码 代码如下:

[ parentView addSubview:myslider ];//添加到父视图 

或 
复制代码 代码如下:

[ self.navigationItem.titleView addSubview:myslider ];//添加到导航栏

五、读取控件值
复制代码 代码如下:

float value = mySlider.value; 

六、通知
要想在滑块值改变时收到通知,可以用UIControl类的addTarget方法为UIControlEventValueChanged事件添加一个动作。
复制代码 代码如下:

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

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

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


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

mySlider.continuous = YES ; 

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

七、UISlider两边有空隙的解决方法
之前做过一个播放器,音量条两边有空隙。在去新浪面试的时候,面试官提到了这个知识点。我在stackoverflow上爬了好久终于找到了方法,分享给iOS初学者。
重写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);
}

当然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;

您可能感兴趣的文章:

相关文章

  • iOS当多个网络请求完成后执行下一步的方法详解

    iOS当多个网络请求完成后执行下一步的方法详解

    在多线程中,有时候我们会遇到一个界面同时有多个网络请求(比如a,b,c,d四个网络请求),在这四个个请求结束后,在请求到数据去做其他操作(UI更新等),下面这篇文章主要给大家介绍了关于iOS当多个网络请求完成后执行下一步的相关资料,需要的朋友可以参考下。
    2017-12-12
  • iOS常见宏理解及使用方法

    iOS常见宏理解及使用方法

    这篇文章主要给大家介绍了关于iOS常见宏理解及使用方法的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • iOS中tableView cell分割线的一些设置技巧

    iOS中tableView cell分割线的一些设置技巧

    在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,下面通过这篇文章来一起学习学习在iOS中tableView cell分割线的一些设置技巧,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • IOS 键盘挡住输入框的问题解决办法

    IOS 键盘挡住输入框的问题解决办法

    这篇文章主要介绍了IOS 键盘挡住输入框的问题解决办法的相关资料,需要的朋友可以参考下
    2017-06-06
  • Terminal该如何自定义提示详解

    Terminal该如何自定义提示详解

    这篇文章主要给大家介绍了关于Terminal如何自定义提示的相关资料,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-06-06
  • IOS程序开发之禁止输入表情符号实例代码

    IOS程序开发之禁止输入表情符号实例代码

    如何禁止输入表情符号呢?下面脚本之家小编给大家分享IOS程序开发之禁止输入表情符号实例代码,感兴趣的朋友参考下吧
    2016-04-04
  • iOS MRC 下 block 循环引用问题实例讲解

    iOS MRC 下 block 循环引用问题实例讲解

    本文通过文字说明加代码的形式给大家介绍了iOS MRC 下 block 循环引用问题,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-12-12
  • iOS两丫技术之UILabel性能不够的解决方法

    iOS两丫技术之UILabel性能不够的解决方法

    这篇文章主要介绍了iOS中控件UILabel性能不够而自定义UILabel的过程,UILable是iPhone界面最基本的控件,主要用来显示文本信息,下面通过本文我们来了解一下
    2022-08-08
  • iOS发送验证码倒计时应用

    iOS发送验证码倒计时应用

    点击发送验证码button。倒计时开始,这篇文章就为大家详细介绍了iOS发送验证码倒计时应用的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 关于iOS获取属性你真的了解吗?

    关于iOS获取属性你真的了解吗?

    这篇文章主要给大家介绍了关于iOS取属性的相关资料,当说到取属性,相信很多的iOS开发者们会说出很多,但你就真的理解吗?下面就来详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12

最新评论