为什么UISlider的自定义拇指图像会出现像素化? (里面的图像和代码)

时间:2016-03-01 08:03:23

标签: ios iphone

UISlider的默认拇指有时候不容易被所有人抓住和触摸(由于有些人的手指比较大),我的目的是让触摸热点区域变大,解决这个问题,我添加了一个自定义的拇指图像,问题是图像变得像素化了!

问题:

拇指图像的像素化像下图一样

enter image description here

下图显示了拇指的热点(通过在模拟器调试菜单中启用color blended

enter image dehttp://i.stack.imgur.com/VWlOt.pngscription here

我在xcode中使用的这个拇指image

enter image description here

有没有办法像UIImageView一样改变拇指图像的大小,我找不到拇指图像的框架来操纵宽度和高度。

我的代码:

    var slider1=UISlider(frame:CGRectMake(Box.x4, 0, Box.x10, 100));
    slider1.minimumValue = 0;
    slider1.center.y = labelBudget1.center.y
    slider1.maximumValue = 100;
    slider1.continuous = false;
    slider1.value = 0;
    slider1.minimumTrackTintColor = hexStringToUIColor(Box.colorHexGreen)
    slider1.maximumTrackTintColor = UIColor.lightGrayColor()
    slider1.setThumbImage(UIImage(named: "sliderThumb.png"), forState: UIControlState.Normal)
    slider1.addTarget(self, action: "slider1ValueDidChange:", forControlEvents: UIControlEvents.TouchDragInside)
    scrollView1.addSubview(slider1);

我尝试解决此问题:

我发现了类似的问题,但没有使用swift,有些问题没有得到解答,其他一些解决方案也没有用,就像这个解决方案没有为我解决问题。

class ExtUISlider: UISlider
{
    var thumbTouchSize : CGSize = CGSizeMake(70, 70)

    override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool
    {
        let bounds = CGRectInset(self.bounds, -thumbTouchSize.width, -thumbTouchSize.height);
        return CGRectContainsPoint(bounds, point);
    }

    override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool
    {
        let thumbPercent = (value - minimumValue) / (maximumValue - minimumValue)
        let thumbSize = thumbImageForState(UIControlState.Normal)!.size.height
        let thumbPos = CGFloat(thumbSize) + (CGFloat(thumbPercent) * (CGFloat(bounds.size.width) - (2 * CGFloat(thumbSize))))
        let touchPoint = touch.locationInView(self)

        return (touchPoint.x >= (thumbPos - thumbTouchSize.width) && touchPoint.x <= (thumbPos + thumbTouchSize.width))
    }
}

我还试图使用更大的图像,但它变得如此之大,以至于它覆盖的区域超出了我的需要!它看起来很奇怪,任何帮助或提示都表示赞赏,非常感谢。

EDIT @ Husyn

如果我使用更大的拇指图像,那么它仍然是像素化的,限制将只是这样,它会将拇指的空白区域视为拇指的一部分,我在尝试之前尝试过,请参阅gif。

enter image description here

我使用的滑块image

enter image description here

2 个答案:

答案 0 :(得分:1)

Psy |

已解决在IRC频道

我只需要在图像集中添加2x 3x图像 enter image description here

图像分辨率为

  

triangle.png(27 * 42)

     

triangle@2x.png(54 * 84)

     

triangle@3x.png(81 * 126)

答案 1 :(得分:0)

最简单的解决方案是使用具有透明度的大图像。通过这种方式,您将获得更大的触摸区域,用户将无法看到它。