如何更改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;
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

官方的解释是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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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

你可能感兴趣的:(控件)