UISlider自定义:如何向自定义旋钮图像正确添加阴影

问题描述:

我需要为UISlider放置带阴影的自定义旋钮图像。到目前为止,我有一个38x38的图像,其中有一个区域定义了旋钮的阴影。UISlider自定义:如何向自定义旋钮图像正确添加阴影

Knob Image@2x

现在而使用该图像,当我旋钮滑动到最末端的实际旋钮是不能够覆盖的端点,因此结束点是根据所述旋钮图像的透明区域可见

knob at the extreme end

这是我使用自定义UISlider

UIImage *slideBtImg = [UIImage imageNamed:SliderKnobImg];
[self.ratingSlider setThumbImage:slideBtImg forState:UIControlStateNormal];
[self.ratingSlider setThumbImage:slideBtImg forState:UIControlStateHighlighted];

代码3210

如何实现一个自定义旋钮,下方有阴影,正确覆盖终点?

看里面UISlider.h,有一些方法,让您自定义滑块旋钮和轨道根据需要。 (iOS 2.0以上)

// lets a subclass lay out the track and thumb as needed 
- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds; 
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds; 
- (CGRect)trackRectForBounds:(CGRect)bounds; 
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value; 

这是我自己的例子。它需要一些数学工作。我得到当前滑块位置的值比率(从0到1)并调整它以使我的阴影自定义旋钮很好地居中。希望有帮助;)

- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value { 
    float valueRatio = (value - self.minimumValue)/valueRange; 
    return CGRectMake(valueRatio * (bounds.size.width - 26) + 3, 7, 20, 20); 
} 

您可以添加一些透明空间到您的图像SliderKnobImg。保持图像的宽度小于滑块,然后使用[slideBtImg resizableImageWithCapInsets:...]作为滑块的thumbImage