时间:2021-05-20
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;
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
微信小程序UI与容器组件总结1.总结与概述2.容器组件2.1组件容器(view)2.2可滚动视图容器(scroll-view)2.3滑块视图容器(swiper)
写在前面: 这次我主要想总结一下微信小程序实现上下滚动消息提醒,主要是利用swiper组件来实现,swiper组件在小程序中是滑块视图容器。我们通过vertic
组件—滑块基础用法默认自定义初始值隐藏Tooltip格式化Tooltip禁用exportdefault{data(){return{value1:0,value
Vueprops用法详解组件接受的选项之一props是Vue中非常重要的一个选项。父子组件的关系可以总结为:propsdown,eventsup父组件通过pro
基于mithril.js,javascript,scss写一个可拖动的滑块组件,供大家参考,具体内容如下问题描述:需求需要实现一个可拖动的滑块组件,但是又不能用