2012-05-16 24 views
5

我想点击而不是通过拖动滑块来点击UISlider上的特定点时触发操作。在点击特定点时更改Uislider值

如何在点上设置滑块值点击UISlider?

一段代码将不胜感激。

+0

你有没有尝试过自己的东西? – Zoleas

+0

我已经尝试过放置自定义按钮,但它不是正确的方式。我也尝试定义触地得分,并触摸滑块内部事件,但都不起作用。 – Ronak

回答

2
如果V1是与该地方uislider后面普通的背景一个UIView \

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == v1) 
    { 
    CGPoint location = [touch locationInView:v1]; 
    NSInteger i = location.x; 
    } 

然后通过与V1的帧即如果V1帧x值= 50和我相乘得到XPOINT的百分比

尝试的UIView的touchesBegan功能= 5means 10%然后乘以滑块值的百分比值来改变滑块值

+1

@ user1389841如果你认为答案是有用的,不要忘记你可以接受答案。 – NAZIK

+2

您也可以在点击视图后使用触摸移动功能进行滑动。 – NAZIK

36
UISlider *slider = [[[UISlider alloc] init] autorelease]; 
… 

滑块设置

… 
UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)] autorelease]; 
[slider addGestureRecognizer:gr]; 
- (void)sliderTapped:(UIGestureRecognizer *)g { 
    UISlider* s = (UISlider*)g.view; 
    if (s.highlighted) 
     return; // tap on thumb, let slider deal with it 
    CGPoint pt = [g locationInView: s]; 
    CGFloat percentage = pt.x/s.bounds.size.width; 
    CGFloat delta = percentage * (s.maximumValue - s.minimumValue); 
    CGFloat value = s.minimumValue + delta; 
    [s setValue:value animated:YES]; 
} 
+3

不要忘记为UIControlEventValueChanged发起事件:-) –

+4

由于@DanVanWinkle声明不要忘记发生火灾控制事件,否则你的UI将更新,但你的后端不会。在sliderTapped结束时触发事件调用:[s sendActionsForControlEvents:UIControlEventValueChanged]; –

+1

是否可以用UIControl的addTarget:action:forControlEvents:API做同样的事情? – rclai