自定义UISlider图像工作不正常

时间:2013-05-16 16:45:38

标签: ios uiimage uislider

使用此代码:

UISlider *slider = [[UISlider alloc]initWithFrame:sliderFrame];
    [slider setThumbImage:[UIImage imageNamed:@"sliderThumb"] forState:UIControlStateNormal];
    UIImage *sliderLeftTrackImage = [[UIImage imageNamed: @"sliderMin"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
    UIImage *sliderRightTrackImage = [[UIImage imageNamed: @"sliderMax"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
    [slider setMinimumTrackImage: sliderLeftTrackImage forState: UIControlStateNormal];
    [slider setMaximumTrackImage: sliderRightTrackImage forState: UIControlStateNormal];

sliderMin和sliderMax图像均为210x34(与滑块框架大小相同)。 sliderMin为蓝色,sliderMax为红色。当滑块一直向左,我正确地看到红色条。但是,将拇指向右滑动几个像素后,整个条形变为蓝色(sliderMin图像)。显然我只应该看到滑块左侧的蓝色条。我做错了什么?

1 个答案:

答案 0 :(得分:3)

首先,您使用的是弃用的API。除非你需要支持iOS 4.3(为什么?),否则你应该使用resizableImageWithCapInsets:resizingMode:代替stretchableImageWithLeftCapWidth:topCapHeight:

UIImage *sliderLeftTrackImage = [[UIImage imageNamed: @"sliderMin"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9, 0, 9)];
UIImage *sliderRightTrackImage = [[UIImage imageNamed: @"sliderMax"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9, 0, 9)];

现在,鉴于此,您的图像尺寸不正确。在制作可调整大小的图像时,图像应该具有您需要的任何固定端,然后在中间的1个像素将平铺以填充其余部分。因此,您的滑块图像应为19像素宽(而不是210像素)。视网膜版本应为38像素宽(每端18个固定,中间有2个像素将被平铺)。