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

时间:2013-04-25 14:16:54

标签: ios uikit uislider

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

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];

如何实现一个带阴影的自定义旋钮,正确覆盖端点?

2 个答案:

答案 0 :(得分:0)

查看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;

这是我自己的例子。这需要一些数学工作。我得到当前滑块位置的valueRatio(从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);
}

答案 1 :(得分:-1)

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