2013-01-16 4 views
9

私はUISliderを含む私の最初のiOSアプリを開発しています。私はUISliderがドラッグされたときに値を取得する方法を知っています。しかし、私のアプリでは、スライダーの価値をワンタッチで得る必要があります。つまり、UISliderのどこかに触れると、UILabelに正しい値が表示されます。ワンタッチでUISliderの値を変更するにはどうすればよいですか?

このようにすることは可能ですか?チュートリアルやコードは非常に役に立ちます。

答えて

19

コードがあなたのために役に立つかもしれ後書きください:)

ここtapCount.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; 
    } 

を宣言int変数でありますスウィフトユーザー

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 
} 
+0

は、UISliderのタップの数を数える何か方法はありますか.. – Midas

+0

私の編集した回答を表示 – iPatel

+0

また速報のために投稿してください –

0

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中の現在(最新)の値を表示する例とこの第二のチュートリアルは、例えば、以下の画像を参照します。

enter image description here

+0

ありがとうあなたの助けパラスのために。しかし、私はこれを探していませんでした。私はここで別の質問から探しています。これは私が探していたものでしたhttp://stackoverflow.com/questions/2895122/iphoneprogramming-uislider-to-position-at-clicked-location – Midas

+0

あなたが正確に何をしたいですか? –

+0

@Ravisankarvmオハイオ州オクラホマ今私は、クリックしたり、画面上でタップするだけで、変更されたスライダの値でその値を与えることを理解... –

6

補正@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; 
} 
+0

長期的には、「UISlider」を上書きすることは脆く、iOSのアップグレードに追いつくためには一定のメンテナンスが必要であることがわかりました。私はもっ​​と良い解決策はhttps://github.com/arquebuse/TGPControlsで公開されています。 'UISlider'をオーバーライドしないので、はるかに堅牢であることが証明されています。また、アニメーションには 'CALayer'を使用しています。これは滑らかで完全にカスタマイズ可能です。 – SwiftArchitect

1

受け入れ答えのためのスウィフトのバージョンは、

​​
関連する問題