Mid*_*das 10 iphone objective-c uislider ios
我正在开发我的第一个iOS应用程序,其中包含一个UISlider.我知道如何在UISlider拖动时获取值.但对于我的应用程序,我需要一键式获取滑块的值; 即如果我触摸某处UISlider,UILabel则应显示其正确值.
这样可能吗?任何教程或代码都非常有用.
iPa*_*tel 19
请写下面的代码可能对您有所帮助:)
这里tapCount是int在.h文件中声明的变量
- (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;
}
Run Code Online (Sandbox Code Playgroud)
对于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
}
Run Code Online (Sandbox Code Playgroud)
更正@ipatel:先前答案中的数学不完整,并且由于缺少拇指宽度考虑而导致抖动.
如果您选择子类,它应该是什么样子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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9862 次 |
| 最近记录: |