10

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

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

4

4 に答える 4

20

ここで、 tapCountは、 .hファイルintで宣言する変数です。

- (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
}
于 2013-01-16T10:56:59.713 に答える
10

訂正@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;
}
于 2013-10-19T04:04:58.920 に答える
2

受け入れられた答えのための迅速なバージョン、

@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)
    }
}
于 2016-01-14T12:14:34.453 に答える
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

の現在の(最新の)値を表示する例を含むこの2番目のチュートリアルは、たとえば下の画像UISliderUILable 参照してください。

ここに画像の説明を入力してください

于 2013-01-16T10:47:38.250 に答える