我的PageViewController中有多个控制器,在一个控制器中我有一些滑块。现在有一个问题,用户必须完全触摸滑块圆(我不确定正确的表达式,拇指? - 移动部分),我想增加区域,其中反应滑块而不是整个PageViewController。我试过这些解决方案,但它没有帮助:
thumbRectForBounds:
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value
{
return CGRectInset ([super thumbRectForBounds:bounds trackRect:rect value:value], 15, 15);
}
增加hitTest区域:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (CGRectContainsPoint(CGRectInset(self.frame, 200, 200), point) || CGRectContainsPoint(CGRectInset(self.frame, 200, 200), point)) {
return self;
}
return [super hitTest:point withEvent:event];
}
我在自定义滑块类中有这些方法,因为我想重用它。最后我发现并且尚未尝试的是在滑块上创建一些对象层,其中"采取"手势并禁用PageViewController,但我不知道该怎么做,我不确定它是否是最佳解决方案。
答案 0 :(得分:2)
我不是UISlider组件的忠实粉丝,因为正如您所注意到的,增加实际滑块的命中区域并非易事。我建议您使用平移手势来复制UISlider以获得更好的用户体验:
我。使用带滑块图像的单独UIImageView创建滑块背景。 II。创建PanGesture:
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:);
[imageView addGestureRecognizer:pan];
III。实现handlePan方法:
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
//pan (slide) begins
CGPoint translation = [recognizer locationInView:self.view];
translation.y = self.slideImage.center.y;
self.slideImage.center = translation;
if(recognizer.state == UIGestureRecognizerStateEnded) {
LTDebugLog(@"\n\n PAN, with spot: %f\n\n", self.slideImage.center.x);
//do something after user is done sliding
}
}
这种方法的最大好处是,您可以获得更好的用户体验,因为您可以根据需要调整响应式UIImageView。
或者,您可以继承UISlider并增加其中的命中空间,但根据我的经验,这会产生混合结果。
希望这有帮助
答案 1 :(得分:1)
在CustomSlider
类覆盖thumbRectForBounds
方法中:
只需根据需要返回rect值:
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value
{
return CGRectMake (bounds.origin.x, bounds.origin.y, yourWidthValue, yourHeightValue );
}
根据您的要求更改yourWidthValue
和yourHeightValue
。然后在使用
创建如下对象:
CustomSlider *slider = [[CustomSlider alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
[slider thumbRectForBounds: slider.bounds trackRect:slider.frame value:15.f]; // change values as per your requirements.
希望这有帮助。
答案 2 :(得分:1)
创建一个自定义拇指图像,该图像具有较大的空边距并在滑块上设置,如下所示:
[theSlider setThumbImage:[UIImage imageNamed:@"slider_thumb_with_margins"] forState:UIControlStateNormal];
要制作图像,请使用多个UIKit图稿提取器中的任何一个获取系统拇指图像的副本(只需在网上搜索一个)。在Photoshop中打开拇指图像,并将画布大小增加两倍您想要添加的边距。确保更改画布大小而不是图像大小,因为图像大小将拉伸图像以填充新大小。这将在拇指周围放置空白区域,这将是命中测试区域的一部分,但由于它全部是透明的,因此不会改变滑块的外观。