2.9 滑块控件——UISlider

前几节所介绍的控件都有一个共同的特点,即状态的变化或值的变化都是离散的,如UIButton的正常、高亮、选中,UISwitch的开和关,UISegmentedControl按钮值的切换等。UISlider控件与上述控件最大的区别在于其值的变化可以是连续的,由于这种特性,UISlider控件可以处理一些连续变化量的交互逻辑。

2.9.1 UISlider的创建与常规设置

打开Xcode开发工具,创建一个名为UISliderTest的工程,在ViewController类的viewDidLoad方法中添加如下代码。

Swift语言版本:

            override func viewDidLoad() {
                super.viewDidLoad()
                let slider = UISlider(frame: CGRect(x: 20, y: 100, width: 280, height: 30))
                slider.isContinuous = true
                slider.minimumValue = 0
                slider.maximumValue = 10
                slider.minimumTrackTintColor = UIColor.red
                slider.maximumTrackTintColor = UIColor.green
                slider.thumbTintColor = UIColor.blue
                slider.addTarget(self, action: #selector(changeValue), for: .valueChanged)
                self.view.addSubview(slider)
            }

Objective-C语言版本:

        - (void)viewDidLoad {
            [super viewDidLoad];
            UISlider * slider = [[UISlider alloc]initWithFrame:CGRectMake(20, 100, 280, 30)];
            slider.continuous = YES;
            slider.minimumValue = 0;
            slider.maximumValue=10;
            slider.minimumTrackTintColor = [UIColor redColor];
            slider.maximumTrackTintColor = [UIColor greenColor];
            slider.thumbTintColor = [UIColor blueColor];
            [slider addTarget:self action:@selector(changeValue:) forControlEvents:UIControlEventValueChanged];
            [self.view addSubview:slider];
        }

continuous属性用于设置UISlider控件的触发方法是否连续触发,如果设置为布尔值真,用户在滑动滑块时,触发方法就会多次执行;如果设置为布尔值假,只有当用户滑动操作结束时,方法才会触发。minimunValue设置UISlider控件的最小值,即滑块在最左端时控件的值。maximumValue设置UISlider控件的最大值,即滑块在最右端时控件的值。minimumTrackTintColor属性设置滑块在左中轴的颜色。maximumTrackColor设置滑块在右中轴的颜色。thumTintColor设置滑块本身的颜色。运行工程,效果如图2-31所示。

图2-31 UISlider控件

使用addTarget:action:forControlEvents进行触发方法的添加,在UISlider类型的参数中可以获取控件的当前值并进行逻辑处理,示例如下。

Swift语言版本:

            func changeValue(slider:UISlider) {
                print(slider.value)
            }

Objective-C语言版本:

        -(void)changeValue:(UISlider *)slider{
            NSLog(@"%f", slider.value);
        }

2.9.2 对UISlider添加图片修饰

UISlider类提供了一些方法对UISlider控件进行图片修饰,使用如下代码。

Swift语言版本:

        slider.minimumValueImage = UIImage(named: "image")
        slider.maximumValueImage = UIImage(named:" image")
        slider.setThumbImage(UIImage(named: "image"), for: .normal)

Objective-C语言版本:

        slider.minimumValueImage = [UIImage imageNamed:@"image"];
        slider.maximumValueImage = [UIImage imageNamed:@"image"];
        [slider setThumbImage:[UIImage imageNamed:@"image"]
    forState:UIControlStateNormal];

minimumValueImage属性设置左视图图片,maximumValueImage属性设置右视图图片,setThumbImage:forState方法设置控件在某个状态下的滑块图片。这时运行工程,效果如图2-32所示。

图2-32 添加了图片修饰的UISlider控件