如何使用一次触摸来更改UISlider值?

我正在开发我的第一个包含UISlider iOS应用程序。 我知道如何获得UISlider拖动的价值。 但是对于我的应用程序,我需要一次获得滑块的值。 即如果我触摸UISlider某个地方, UILabel应显示其正确的值。

这是可能的吗? 任何教程或代码将非常有帮助。

请写下面的代码可能对你有所帮助:)

这里tapCount是在.h文件中声明的intvariables

 - (void)viewDidLoad { tapCount = 0; // Count tap on Slider UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)]; [slider addGestureRecognizer:gr]; } - (void)sliderTapped:(UIGestureRecognizer *)g { /////////////// For TapCount//////////// tapCount = tapCount + 1; NSLog(@"Tap Count -- %d",tapCount); /////////////// For TapCount//////////// 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]; NSString *str=[NSString stringWithFormat:@"%.f",[self.slider value]]; self.lbl.text=str; } 

对于Swift用户

 override func viewDidLoad() { super.viewDidLoad() tapCount = 0 let gr = UITapGestureRecognizer(target: self, action: #selector(self.sliderTapped(_:))) slider.addGestureRecognizer(gr) } func sliderTapped(_ g: UIGestureRecognizer) { /////////////// For TapCount//////////// tapCount = tapCount + 1 print("Tap Count -- \(tapCount)") /////////////// For TapCount//////////// let s: UISlider? = (g.view as? UISlider) if (s?.isHighlighted)! { return } // tap on thumb, let slider deal with it let pt: CGPoint = g.location(in: s) let percentage = pt.x / (s?.bounds.size.width)! let delta = Float(percentage) * Float((s?.maximumValue)! - (s?.minimumValue)!) let value = (s?.minimumValue)! + delta s?.setValue(Float(value), animated: true) let str = String(format: "%.f", slider.value) lbl.text = str } 

校正@远程:以前答案中的math不完整,并由于缺less拇指宽度考虑而导致抖动

如果您select子类UISlider ,则应如下UISlider

 - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { [super beginTrackingWithTouch:touch withEvent:event]; CGPoint touchLocation = [touch locationInView:self]; CGFloat value = self.minimumValue + (self.maximumValue - self.minimumValue) * ((touchLocation.x - self.currentThumbImage.size.width/2) / (self.frame.size.width-self.currentThumbImage.size.width)); [self setValue:value animated:YES]; return YES; } 

Swift版本接受答案,

 @IBAction func sliderTappedAction(sender: UITapGestureRecognizer) { if let slider = sender.view as? UISlider { if slider.highlighted { return } let point = sender.locationInView(slider) let percentage = Float(point.x / CGRectGetWidth(slider.bounds)) let delta = percentage * (slider.maximumValue - slider.minimumValue) let value = slider.minimumValue + delta slider.setValue(value, animated: true) } } 

你可以用下面的动作方法显示UISlider的当前值。

 - (IBAction) sliderValueChanged:(UISlider *)sender { yourLable.text = [NSString stringWithFormat:@"%.1f", [sender value]]; } 

查看这些教程和UISlider例子:

  1. UISlider-tutorial-example-how-to-use-slider-in-iphone-sdk-xcode 。
  2. iphone-slider-control-uislider-control-tutorial 。

本示例的第二个教程以UISliderUILable显示UISlider的当前(最新)值,请参阅下面的示例。

在这里输入图像说明