Iphone 更大的UISlider正常,但跟踪区域问题
我的目标是为拇指图像创建一个35像素高的更大的UISlider 我将UISlider子类化,并添加了以下方法:Iphone 更大的UISlider正常,但跟踪区域问题,iphone,uislider,Iphone,Uislider,我的目标是为拇指图像创建一个35像素高的更大的UISlider 我将UISlider子类化,并添加了以下方法: - (CGRect)trackRectForBounds:(CGRect)bounds { return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50); } 然后,我使用setThumbImage从控制器设置thum图像: 我的大拇指显示得很好 我遇到的问题是,跟踪区域在19像
- (CGRect)trackRectForBounds:(CGRect)bounds
{
return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50);
}
然后,我使用setThumbImage从控制器设置thum图像:
我的大拇指显示得很好
我遇到的问题是,跟踪区域在19像素左右仍然是相同的,如何将其扩展到50像素
谢谢
T.我相信您可能想看看
thumbRectForBounds:trackRect:value:
iPhone操作系统的UISlider控件的一个长期问题是,您无法使它更高。更具体地说,您可以通过为其拇指和轨迹指定更高的图像使其看起来更高,但触摸区域保持为23像素的微小高度
使默认滑块更易于触摸,并且该技术的一种变体可以处理较大的滑块。您需要做的是子类UISlider,并重写类中的pointInside:
// How many extra touchable pixels you want above and below the 23px slider
#define SIZE_EXTENSION_Y 10
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
CGRect bounds = self.bounds;
bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y);
return CGRectContainsPoint(bounds, point);
}
在Interface Builder中,将滑块设置为使用新的UISlider子类,现在有了一个43像素可触摸高度的滑块。我正在使用此解决方案:)
通过增加UISlider框架的高度来增加UISlider拇指命中区域。这种方法避免了任何偏移以及随后需要校正滑块帧
- (void)viewDidLoad{
[super viewDidLoad];
//expand slider hit area
self.slider.frame = CGRectInset(self.slider.frame, 0, -10);
}
不幸的是,UISlider没有使用此函数的返回值来确定滑块拇指的触摸区域。如何调用thumbRectForBounds方法,是UISlider委托方法吗?小更正:我认为您希望将负大小扩展值传递给CGRectInset,以使矩形变大。谢谢,谢谢,谢谢!设置为-10时,此操作非常有效!有一段时间我一直在尝试自己解决这个问题,效果非常好。我想它在iOS 5中已经不起作用了。例如,值100不起作用。尝试了积极和消极两种方式。在iOS5中它仍然对我有影响,但结果是不可预测的。即使在-1,可以触摸到的区域也非常大,比我需要的要大得多,但是我不能得到比1小得多的区域,所以不知道还能做什么。这个解决方案似乎比@Allen Pike的解决方案简单得多。它似乎也在起作用。他的答案比你的答案更受欢迎有什么原因吗?这确实有效,但它也会垂直偏移滑块,但这很容易修复。@Alexajdu这样你就不会子类化UISlider了,对吗?我不能用你的答案解决这个问题是的,它的解决方案没有子类化。你有错误吗?这个答案比上面两个简单得多。效果很好。谢谢
- (void)viewDidLoad{
[super viewDidLoad];
//expand slider hit area
self.slider.frame = CGRectInset(self.slider.frame, 0, -10);
}