iPhone自定义UISlider预加载和圆边问题

时间:2011-12-28 12:51:22

标签: ios custom-controls uislider visual-glitch


我正在尝试实现一个自定义的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

我遇到了两个小问题

  1. 当我将滑块滑过其中一条边(进度= 0.0 /进度= 1.0)时,我可以清楚地看到两侧的“左侧”,我不知道如何处理它,不幸的是:)

    滑块图片: enter image description here enter image description here enter image description here

    问题:

    Bad Slider edges

  2. 我看到常规的UISlider(蓝色和银色)几秒钟,然后才加载自定义图形,或者当我实际移动滑块时。我不确定为什么会发生这种情况.. 编辑:这只发生在模拟器中,现在工作正常。

  3. 提前感谢您的任何帮助:) 晒。

2 个答案:

答案 0 :(得分:2)

您无需子类化UISlider来实现此效果,如果您这样做,则肯定不会在drawRect方法中设置轨道图像。 drawRect应该只包含绘图代码,只要控件的任何部分需要重绘,就会调用它。

在子类中(从initWithFrame和initWithCoder调用)或首先创建滑块的对象中,使用单独的方法设置拇指和轨迹图像。首次创建滑块时,只需执行一次。不要覆盖drawRect。

您也不需要手动调用awakeFromNib,除非您还有一些特定的代码?如果您只使用过IB中的滑块,那么这将是在子类中设置自定义图像的常见位置。

对于方形端,问题是轨迹图像的最边缘是方形的,因此它显示在拇指周围。使轨道图像的两端都圆化,中间有一个1px可伸缩区域,如下所示:

enter image description here

答案 1 :(得分:2)

我自己也有一个非常类似的问题。事实证明,我在界面构建器中添加的滑块的大小(宽度x高度)与我用于自定义滑块的图像的大小不匹配。一旦我将它们匹配,滑块末端的那些“残羹剩饭”便消失了。