私はUISlider
を含む私の最初のiOSアプリを開発しています。私はUISlider
がドラッグされたときに値を取得する方法を知っています。しかし、私のアプリでは、スライダーの価値をワンタッチで得る必要があります。つまり、UISlider
のどこかに触れると、UILabel
に正しい値が表示されます。ワンタッチでUISliderの値を変更するにはどうすればよいですか?
このようにすることは可能ですか?チュートリアルやコードは非常に役に立ちます。
私はUISlider
を含む私の最初のiOSアプリを開発しています。私はUISlider
がドラッグされたときに値を取得する方法を知っています。しかし、私のアプリでは、スライダーの価値をワンタッチで得る必要があります。つまり、UISlider
のどこかに触れると、UILabel
に正しい値が表示されます。ワンタッチでUISliderの値を変更するにはどうすればよいですか?
このようにすることは可能ですか?チュートリアルやコードは非常に役に立ちます。
コードがあなたのために役に立つかもしれ後書きください:)
ここ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
}
UISlider
の現在の値は、以下のようなアクション方法で表示できます。
- (IBAction) sliderValueChanged:(UISlider *)sender {
yourLable.text = [NSString stringWithFormat:@"%.1f", [sender value]];
}
UISlider
のこれらのチュートリアルと例を参照してください。
UISlider
UILable
中の現在(最新)の値を表示する例とこの第二のチュートリアルは、例えば、以下の画像を参照します。
ありがとうあなたの助けパラスのために。しかし、私はこれを探していませんでした。私はここで別の質問から探しています。これは私が探していたものでしたhttp://stackoverflow.com/questions/2895122/iphoneprogramming-uislider-to-position-at-clicked-location – Midas
あなたが正確に何をしたいですか? –
@Ravisankarvmオハイオ州オクラホマ今私は、クリックしたり、画面上でタップするだけで、変更されたスライダの値でその値を与えることを理解... –
補正@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;
}
長期的には、「UISlider」を上書きすることは脆く、iOSのアップグレードに追いつくためには一定のメンテナンスが必要であることがわかりました。私はもっと良い解決策はhttps://github.com/arquebuse/TGPControlsで公開されています。 'UISlider'をオーバーライドしないので、はるかに堅牢であることが証明されています。また、アニメーションには 'CALayer'を使用しています。これは滑らかで完全にカスタマイズ可能です。 – SwiftArchitect
受け入れ答えのためのスウィフトのバージョンは、
は、UISliderのタップの数を数える何か方法はありますか.. – Midas
私の編集した回答を表示 – iPatel
また速報のために投稿してください –