2

所以我有一个我一直在研究的 UISlider,我需要它有一个自定义图像。我有一个漂亮的@2x 图像,它有很多像素,当我将它添加到 UIImageView 时看起来很棒,但是当我使用相同的图像替换 UISlider 拇指图像时,它像素化了它并使滑块的拇指看起来像废话。关于如何解决这个问题的任何想法?

这是我的一些示例代码。

 slider = [[UISlider alloc] initWithFrame:CGRectMake(sliderOffset, 29.5, siderW, 50)];
    [slider addTarget:self action:@selector(sliderAction) forControlEvents:UIControlEventValueChanged];
    [slider setBackgroundColor:[UIColor clearColor];
    slider.minimumValue = 0.0;
    slider.maximumValue = 10000.0;
    slider.continuous = YES;
    slider.value = 3000.00;
    [slider setThumbImage:[UIImage imageNamed:@"Slider@2x.png"] forState:UIControlStateNormal];
    [slider setThumbImage:[UIImage imageNamed:@"Slider@2x.png"] forState:UIControlStateHighlighted];

提前致谢!

4

1 回答 1

2

这是我解决它的方法:

1) 子类化 UISlider

2)创建一个清晰的图像并将滑块拇指设置为该清晰的图像。

[self setThumbImage:[UIImage imageNamed:@"ClearImageForOverride.png"] forState:UIControlStateNormal];
    [self setThumbImage:[UIImage imageNamed:@"ClearImageForOverride.png"] forState:UIControlStateHighlighted];

3)创建一个 UIImageView 并使其跟随拇指的中心。

float imageWH = PassedInHeightWidthFromSubClass;
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 1, imageWH, imageWH)];
imageView.image = [UIImage imageNamed:@"NewThumbImage"];
[self addSubview:imageView];
[self bringSubviewToFront:imageView];

imageView.center = CGPointMake(thumbRect.origin.x + self.frame.origin.x + localImageViewCenter,  self.frame.origin.y - sliderImageViewYOffset);
[self addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged];

4)然后当边值改变时,我告诉 imageView 它的中心应该在哪里。

-(void)sliderValueChanged {
    CGRect trackRect = [self trackRectForBounds:self.bounds];
    CGRect thumbRect = [self thumbRectForBounds:self.bounds trackRect:trackRect value:self.value];
    imageView.center = CGPointMake(thumbRect.origin.x + self.frame.origin.x + localImageViewCenter,  self.frame.origin.y - sliderImageViewYOffset);
}

从本质上讲,您可以为滑块旋钮提供任何尺寸的图像,它看起来很棒并且可以完美地作为旋钮工作。

于 2014-04-17T17:04:15.037 回答