iOS学习笔记--如何更改UISlider的高度

在做一个项目的过程中,需要用到UISlider,但是又不是那种系统给定的样式,找了好久才找到解决办法,就是重写系统的一下方法,就可以实现你想要的样式了。

UISlider类中有四个方法:

- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds;
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds;
- (CGRect)trackRectForBounds:(CGRect)bounds;
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value;

官方的解释是lets a subclass lay out the track and thumb as needed,我所里的意思是如果需要可以让子类更改轨道和拇指的形状。

// 设置最大值
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds
{
    return CGRectMake(0, 0, CGRectGetWidth(self.frame)/ 2, CGRectGetHeight(self.frame) / 2);
}
// 设置最小值
- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds
{
    return CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
}

// 控制slider的宽和高,这个方法才是真正的改变slider滑道的高的
- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
}

// 改变滑块的触摸范围
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value
{
    return CGRectInset([super thumbRectForBounds:bounds trackRect:rect value:value], 10, 10);
}

这里有一点说明的,slider上的那个滑动的圆圈的大小是没有办法进行改变的,并且,重写这四个方法,可以改变,没有办法把圆圈滑到两端的问题。而且要注意哦,写一个继承自UISider的子类,然后实现上面的方法才可以,其实,在实际的开发过程中,那四个方法是不必全部重写的,根据需要进行重写就可了,大家可以自己写个小demo看看,实验一下。

你可能感兴趣的:(iOS开发)