Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 更大的UISlider正常,但跟踪区域问题_Iphone_Uislider - Fatal编程技术网

Iphone 更大的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像

我的目标是为拇指图像创建一个35像素高的更大的UISlider

我将UISlider子类化,并添加了以下方法:

- (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);

}