使用此代码:
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图像)。显然我只应该看到滑块左侧的蓝色条。我做错了什么?
答案 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个像素将被平铺)。