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

标签 ios objective-c uislider

目前我正在对 UISlider 进行子类化,并在 drawRect 中设置默认值。我得到了一个奇怪的结果。

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

- (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];

}

最佳答案

您没有调用 [super drawRect:rect],这会导致幻灯片永远无法正确绘制,但是您应该永远覆盖 drawRect: 除非您需要执行自定义绘图。

初始化默认值的正确位置是指定的初始化程序。作为 UISlider 的子类 UIView,您需要重写 -initWithFrame:-initWithCoder:,以处理以编程方式或通过 Nib 创建 slider 的两种情况。

例如

- (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];
}

关于ios - 如何在 UISlider 的自定义子类中更改 UISlider 的默认值,以便我可以多次重用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21813884/

相关文章:

ios - UISlider 边界和框架宽度返回不正确的值

IOS:使用自动布局根据标题文本调整 UIButton 高度?

ios - 如何为整个App设置UIKeyboard-Style?

ios - 如何在 IBAction 中请求通知权限?

ios - Swift iOS -CMTimeMakeWithSeconds : warning: error of -0. 433 由于时间尺度非常短而引入

iphone - 如何做双圆形 slider (时钟功能)

ios - Core Image 中 CIGammaAdjust 滤波器的输入功率值

ios - 替换字符串中的多个占位符

ios - swift PUT API 调用缺少参数

objective-c - iOS应用分发和部署目标