如何在UISlider的自定义子类中更改UISlider的默认值,以便我可以多次重复使用它

时间:2014-02-16 16:20:24

标签: ios objective-c uislider

目前我正在为UISlider创建子类,并在drawRect设置默认值。我得到了一个奇怪的结果。

滑块最小图像位于正确位置,但滑块最大图像左侧有空白区域。中间的滑块图像位于最右侧,maximumTackTintColor的颜色位于滑块的两侧。

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    self.minimumTrackTintColor = [ThemeManager minimumTrackTintColorForSlider];
    self.maximumTrackTintColor = [ThemeManager maximumTrackTintColorForSlider];
    self.minimumValueImage = [UIImage imageNamed:@"sliderLeftDot"];
    self.maximumValueImage = [UIImage imageNamed:@"sliderRightDot"];

    [self setThumbImage:[UIImage imageNamed:@"sliderCentrePiece"] forState:UIControlStateNormal];

}

2 个答案:

答案 0 :(得分:1)

不要将该代码放在drawRect:方法中。将它放在适当的init方法中,或者将其放在您希望自定义滑块时调用的另一种方法中。

更好的方法是使用UIAppearance功能为所有滑块设置色调颜色:

[[UISlider appearance] setMinimumTrackTintColor:someColor];
[[UISlider appearance] setMaximumTrackTintColor:someColor];

答案 1 :(得分:1)

您没有致电[super drawRect:rect]这导致幻灯片永远无法正确绘制,但您应该从不覆盖drawRect:,除非您需要执行自定义绘图。< / p>

初始化默认值的正确位置是指定的初始化程序。由于UISliderUIView的子类,您需要覆盖-initWithFrame:-initWithCoder:,以处理以编程方式或通过笔尖创建滑块的情况。< / p>

例如

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self commonInit];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [self commonInit];
    }
    return self;
}

- (void)commonInit {
    self.minimumTrackTintColor = [ThemeManager minimumTrackTintColorForSlider];
    self.maximumTrackTintColor = [ThemeManager maximumTrackTintColorForSlider];
    self.minimumValueImage = [UIImage imageNamed:@"sliderLeftDot"];
    self.maximumValueImage = [UIImage imageNamed:@"sliderRightDot"];
    [self setThumbImage:[UIImage imageNamed:@"sliderCentrePiece"] forState:UIControlStateNormal];
}