3


我正在尝试实现一个自定义 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)时,我可以清楚地看到侧面的“剩余部分”,不幸的是我也不知道如何处理它:)

    滑块图像: 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

    问题:

    坏滑块边缘

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

在此先感谢您的帮助:)
Shai。

4

2 回答 2

2

你不需要子类 UISlider 来实现这个效果,如果你这样做了,你肯定不会在 drawRect 方法中设置轨道图像。drawRect 应该只包含绘图代码,每当控件的任何部分需要重绘时都会调用它。

在您的子类(从 initWithFrame 和 initWithCoder 调用)中或在首先创建滑块的对象中,在单独的方法中设置缩略图和跟踪图像。这只需要在第一次创建滑块时执行一次。不要覆盖drawRect。

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

对于方形末端,问题在于轨道图像的最边缘是方形的,因此它显示在拇指周围。将轨迹图的两端弄圆,中间有一个1px的可拉伸区域,像这样:

在此处输入图像描述

于 2011-12-28T13:00:38.693 回答
2

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

于 2012-09-11T21:48:02.020 回答