UISlider
的默认拇指有时候不容易被所有人抓住和触摸(由于有些人的手指比较大),我的目的是让触摸热点区域变大,解决这个问题,我添加了一个自定义的拇指图像,问题是图像变得像素化了!
问题:
拇指图像的像素化像下图一样
下图显示了拇指的热点(通过在模拟器调试菜单中启用color blended
)
我在xcode中使用的这个拇指image:
有没有办法像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。
我使用的滑块image