在做一个项目的过程中,需要用到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));
}
- (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看看,实验一下。