代码之家  ›  专栏  ›  技术社区  ›  user1940321

UISlider Thumb图像像素化

  •  2
  • user1940321  · 技术社区  · 11 年前

    所以我有一个我一直在做的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];
    

    提前谢谢!

    1 回复  |  直到 11 年前
        1
  •  2
  •   user1940321 user1940321    10 年前

    以下是我解决问题的方法:

    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) 然后,当sider值发生变化时,我会告诉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);
    }
    

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