目前我正在为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];
}
答案 0 :(得分:1)
不要将该代码放在drawRect:
方法中。将它放在适当的init
方法中,或者将其放在您希望自定义滑块时调用的另一种方法中。
更好的方法是使用UIAppearance
功能为所有滑块设置色调颜色:
[[UISlider appearance] setMinimumTrackTintColor:someColor];
[[UISlider appearance] setMaximumTrackTintColor:someColor];
答案 1 :(得分:1)
您没有致电[super drawRect:rect]
这导致幻灯片永远无法正确绘制,但您应该从不覆盖drawRect:
,除非您需要执行自定义绘图。< / p>
初始化默认值的正确位置是指定的初始化程序。由于UISlider
是UIView
的子类,您需要覆盖-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];
}