当前位置: 首页 > 编程笔记 >

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

米楚青
2023-03-14
本文向大家介绍iOS中的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;

 类似资料:
  • 滑块控件(Sliders,简称滑块)可以让我们通过在连续或间断的区间内滑动锚点来选择一个合适的数值。区间最小值放在左边,对应的,最大值放在右边。滑块(Sliders)可以在滑动条的左右两端设定图标来反映数值的强度。这种交互特性使得它在设置诸如音量、亮度、色彩饱和度等需要反映强度等级的选项时成为一种极好的选择。 连续滑块(Continuous Slider) 在不要求精准、以主观感觉为主的设置中使用

  • 1.5.0 新增 滑块组件,提供类似微信列表左滑功能,可以方便地对列表项做一些功能操作。 示例 Swipe 组件的示例相关代码在这里 基本使用 Swipe 组件常见的场景是搭配 Scroll 组件使用,既可以纵向滚动,又可以横向左滑出一些按钮对列表项做操作,当然,Swipe 组件也可以单独使用。 <template> <div class="swipe-wrapper"> <cube-s

  • 本文向大家介绍Android自定义控件仿iOS滑块SwitchButton,包括了Android自定义控件仿iOS滑块SwitchButton的使用技巧和注意事项,需要的朋友参考一下 SwitchButton可以点击的时候切换状态,类似CheckBox 在拖动的时候,也可以根据拖动的距离判断是否切换状态,类似ToggleButton 因此要区别出单击事件和拖动事件 实现效果如图所示: 自定义的Sw

  • Custom UISlider 是一个自定义的滑块,允许使用图片来设置滑块

  • 在此输入图像说明 你能告诉我如何在ios swift中实现这个动态图吗

  • 本文向大家介绍总结iOS中runtime的使用,包括了总结iOS中runtime的使用的使用技巧和注意事项,需要的朋友参考一下 做iOS的朋友都知道或听说runtime,这个东西很像java的反射机制,但功能远胜于java的反射。通过runtime我们可以动态的向一个类中添加属性、成员变量、方法,以及对其进行读写访问。 一、runtime简介 RunTime简称运行时。OC就是运行时机制,也就是在

  • 本文向大家介绍Python中的time模块与datetime模块用法总结,包括了Python中的time模块与datetime模块用法总结的使用技巧和注意事项,需要的朋友参考一下 time模块 time模块是包含各方面对时间操作的函数. 尽管这些常常有效但不是所有方法在任意平台中有效. time用struct_time表示时间 函数 time.time(): 返回一个时间戳 time.asctim

  • 本文向大家介绍python中操作文件的模块的方法总结,包括了python中操作文件的模块的方法总结的使用技巧和注意事项,需要的朋友参考一下 在python中操作文件算是一个基本操作,但是选对了模块会让我们的效率大大提升。本篇整理了两种模块的常用方法,分别是os模块和shutil模块。相信这两种模块大家在之间的学习中有所涉及,那么关于具体的文件操作部分,我们一起往下看看都有哪些方法和实例吧。 本教程