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;

(0)

相关推荐

  • iOS应用中UILabel文字显示效果的常用设置总结

    创建UIlabel对象 复制代码 代码如下: UILabel* label = [[UILabel alloc] initWithFrame:self.view.bounds]; 设置显示文本 复制代码 代码如下: label.text = @"This is a UILabel Demo,"; 设置文本字体 复制代码 代码如下: label.font = [UIFont fontWithName:@"Arial" size:35]; 设置文本颜色 复制代码 代码如

  • 总结iOS开发中的断点续传与实践

    前言 断点续传概述 断点续传就是从文件上次中断的地方开始重新下载或上传数据,而不是从文件开头.(本文的断点续传仅涉及下载,上传不在讨论之内)当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会去重头下载,这样很浪费时间.所以项目中要实现大文件下载,断点续传功能就必不可少了.当然,断点续传有一种特殊的情况,就是 iOS 应用被用户 kill 掉或者应用 crash,要实现应用重启之后的断点续传.这种特殊情况是本文要解决的问题. 断点续传原理 要实现断点续传 , 服

  • 总结iOS App开发中控制屏幕旋转的几种方式

    在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewController支持旋转,只需要重写shouldAutorotateToInterfaceOrientation方法. 但是iOS 6里屏幕旋转改变了很多,之前的 shouldAutorotateToInterfaceOrientation 被列为 DEPRECATED 方法,查看UIViewController

  • iOS应用开发中UIScrollView滚动视图的基本用法总结

    在项目开发时遇到一个问题,我在UIViewController上面直接创建了一个UIScrollerView,把UIScrollerView作为一个子视图添加到了UIViewController, 又再UIScrollerView中添加了一个UISlider的组件,在手势滑动的过程中,很难滑动到UISlider这个控件,经常是滑动的时候UIScrollerView进行了滚动, 而UISlider这个控件没有滑动,让人很抓狂. 上网具体去了解了一下UIScrollerView的详解,终于彻底明白了

  • iOS App中调用iPhone各种感应器的方法总结

    CoreMotion框架的使用 CoreMotion框架十分强大,它不仅将加速度传感器和螺旋仪传感器进行了统一配置和管理,还为我们封装了许多算法,我们可以直接获取到设备的运动状态信息. 1.CoreMotion负责处理的数据 CoreMotion负责处理四种数据,一种是加速度数据,一种是螺旋仪数据,一种是磁感应数据,还有一种是前三种数据通过复杂运算得到的设备的运动数据.几个主要的类如下: CMAccelerommterData:设备的加速度数据 typedef struct {     doub

  • iOS App开发中的UISegmentedControl分段组件用法总结

    UISegmentedControl分段控件代替了桌面OS上的单选按钮.不过它的选项个数非常有限,因为你的IOS设备屏幕有限.当我们需要使用选项非常少的单选按钮时它很合适. 一.创建 复制代码 代码如下: UISegmentedControl* mySegmentedControl = [[UISegmentedControl alloc]initWithItems:nil]; 是不是很奇怪没有指定位置和大小呢?没错,我确实在他的类声明里只找到 initWithItems 而未找到 initWi

  • 以代码实例总结iOS应用开发中数据的存储方式

    ios数据存储包括以下几种存储机制: 属性列表 对象归档 SQLite3 CoreData AppSettings 普通文件存储 1.属性列表 复制代码 代码如下: //  //  Persistence1ViewController.h  //  Persistence1  //  //  Created by liu lavy on 11-10-3.  //  Copyright 2011 __MyCompanyName__. All rights reserved.  //    #imp

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

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

  • iOS中sqlite数据库的原生用法

    在iOS中,也同样支持sqlite.目前有很多第三方库,封装了sqlite操作,比如swift语言写的SQLite.swift.苹果官网也为我们封装了一个框架:CoreData. 它们都离不开Sqlite数据库的支持. 本文主要介绍下,如何在swift中使用原生的sqlite的API. 在Xcode中引入sqlite API 新建一个swift项目后,我们需要让项目引入sqlite的动态链接库: 1.项目配置界面,选择Build Phases 2.点开Link Binary With Libra

  • ios中Deep Linking实例分析用法

    在 iOS 中,deep linking 实际上包括 URL Scheme.Universal Link.notification 或者 3D Touch 等 URL 跳转方式.应用场景比如常见的通知,社交分享,支付,或者在 webView 中点击特定链接在 app 中打开并跳转到对应的原生页面. 用的最多也是最常用的是通过 Custom URL Scheme 来实现 deep linking.在 application:openURL:sourceApplication:annotation

  • iOS中NSNumberFormatter的介绍与用法

    前言 iOS中NSDateFormatter用的范围一般来说比较广泛,不过相对于处理数字而言,很少用到NSNumberFormatter,NSNumberFormatter中有很多枚举类型,会为实际开发节省时间. NSNumberFormatter可以用来处理NSString和NSNumber之间的转化,可以满足基本的数字形式的转化.下面话不多说了,来一起看看详细的介绍吧 1:使用+ localizedStringFromNumber:numberStyle:本地化方法格式化NSNumber到N

  • iOS中UIAlertView警告框组件的使用教程

    1. 最简单的用法 初始化方法: 复制代码 代码如下: - (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id /*<UIAlertViewDelegate>*/)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles,

  • iOS中的UIStepper数值加减器用法指南

    UIStepper可以连续增加或减少一个数值.控件的外观是两个水平并排的按钮构成,一个显示为"+",一个显示为"-". 该控件的一个有趣的特征是当用户按住"+","-"按钮时,根据按住的时间长度,空间值的数字也以不同的数字改变.按住的时间越长,数值改变的越快.可以为UIStepper设定一个数值范围,比如0-99. 它的显示效果如下: 1. 属性说明 value: 当前所表示的值,默认为0.0: minimumValue: 最

  • iOS中UIAlertView3秒后消失的两种实现方法

    一,效果图. 二,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIAlertView* alert = [[UIAlertView alloc]initWithTitle:nil message:@"此信息3秒后消失" delegate:nil cancelButtonTitle:nil ot

  • IOS开发中NSURL的基本操作及用法详解

    NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便. 1.URL URL是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. URL可能包含远程服务器上的资源的位置,本地磁盘上的文件的路径,甚

  • iOS中 valueForKeyPath常用用法

    1.valueForKeyPath可以获取数组中的最小值.最大值.平均值.求和.代码如下: NSArray *array = @[@10, @23, @43, @54, @7, @17, @5]; + (NSString *)caculateArray:(NSArray *)array { CGFloat sum = [[array valueForKeyPath:@"@sum.floatValue"] floatValue]; CGFloat avg = [[array valueF

随机推荐