我正在尝试实现一个自定义的UISlider,我用一个名为UISliderCustom的类扩展了它,它有以下代码:
@implementation UISliderCustom
- (id)initWithCoder:(NSCoder *)aDecoder{
if(self == [super initWithCoder:aDecoder]){
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 200, 13);
UIImage *slideMin = [[UIImage imageNamed:@"slideMinimum.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
UIImage *slideMax = [[UIImage imageNamed:@"slideMaximum.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
[self setThumbImage:[UIImage imageNamed:@"slideThumb.png"] forState:UIControlStateNormal];
[self setThumbImage:[UIImage imageNamed:@"slideThumb.png"] forState:UIControlStateHighlighted];
[self setMinimumTrackImage:slideMin forState:UIControlStateNormal];
[self setMaximumTrackImage:slideMax forState:UIControlStateNormal];
}
return self;
}
@end
我遇到了两个小问题
当我将滑块滑过其中一条边(进度= 0.0 /进度= 1.0)时,我可以清楚地看到两侧的“左侧”,我不知道如何处理它,不幸的是:)
滑块图片:
问题:
我看到常规的UISlider(蓝色和银色)几秒钟,然后才加载自定义图形,或者当我实际移动滑块时。我不确定为什么会发生这种情况.. 编辑:这只发生在模拟器中,现在工作正常。
提前感谢您的任何帮助:) 晒。
答案 0 :(得分:2)
您无需子类化UISlider来实现此效果,如果您这样做,则肯定不会在drawRect方法中设置轨道图像。 drawRect应该只包含绘图代码,只要控件的任何部分需要重绘,就会调用它。
在子类中(从initWithFrame和initWithCoder调用)或首先创建滑块的对象中,使用单独的方法设置拇指和轨迹图像。首次创建滑块时,只需执行一次。不要覆盖drawRect。
您也不需要手动调用awakeFromNib,除非您还有一些特定的代码?如果您只使用过IB中的滑块,那么这将是在子类中设置自定义图像的常见位置。
对于方形端,问题是轨迹图像的最边缘是方形的,因此它显示在拇指周围。使轨道图像的两端都圆化,中间有一个1px可伸缩区域,如下所示:
答案 1 :(得分:2)
我自己也有一个非常类似的问题。事实证明,我在界面构建器中添加的滑块的大小(宽度x高度)与我用于自定义滑块的图像的大小不匹配。一旦我将它们匹配,滑块末端的那些“残羹剩饭”便消失了。