0

これが私が現在やっている方法です

- (IBAction)sliderDistanceChanged {
    CGFloat sliderPosition = self.sliderDistance.value;
    NSUInteger sliderIndex = [BGDistanceFilterStop indexForFilterEffect:sliderPosition];

    self.distanceFilterForCatalog = @([BGDistanceFilterStop numberValueOfDistance:sliderIndex]);
    //self.distanceFilterForCatalog= @(self.sliderDistance.value).roundWithForDistanceFilter;
    //[self.distanceFilter setTitle:self.distanceFilterForCatalog.distanceForm forState:UIControlStateNormal];
    [self.distanceFilter setTitle:[BGDistanceFilterStop stringValueOfDistance:sliderIndex] forState:UIControlStateNormal];

}
- (IBAction)SliderNoLongerTouched:(id)sender {
    CGFloat sliderIndex = [BGDistanceFilterStop sliderSnappedPosition:self.sliderDistance.value];
    self.sliderDistance.value=sliderIndex;
}

基本的に、self.sliderDistance.valueを検出し、それに基づいて、丸め後に報告された値を設定します。

ユーザーが触れなくなったら、self.sliderDistance.valueの位置を変更します

それは結構です。

ただし、ユーザーが修正する前に、self.sliderDistance.valueを変更したいと思います。ただし、これはiOSが手の位置とスライダーの値の両方を追跡するために使用するのと同じ変数です。

では、self.sliderDistance.valueを変更せずに、ボタンが適切な場所にスナップするように調整するにはどうすればよいですか?

4

2 に答える 2

2

これらの各アクションは、問題の UISlider にリンクされていると想定しています。1 つ目は によってトリガーされvalueChanged、2 つ目は によってトリガーされtouchUpInsideます。

この場合、最初に署名をこれらに変更します

- (IBAction)sliderDistanceChanged:(UISlider*)sender;
- (IBAction)sliderNoLongerTouched:(UISlider*)sender;

(より単純で自己完結型) のsender代わりにスライダーを参照できるようにします。self.sliderDistance

変更sliderDistanceChanged

    - (IBAction)sliderDistanceChanged:(UISlider*)sender;
          //allocate the raw slider value to a variable
          CGFloat rawValue = sender.value; 

          //calculate the snapped value
          CGFloat snappedValue = [BGDistanceFilterStop sliderSnappedPosition:sender.value];

          //snap the slider in position
          sender.value = snappedValue;


         //now do the rest of your processing 
         //using rawValue if you want the raw value, 
         //snappedValue if you want the snapped value

       }

簡素化するsliderNoLongerTouched

 - (IBAction)sliderNoLongerTouched:(id)sender {
    sender.value = [BGDistanceFilterStop sliderSnappedPosition:sender.value];
}           

(値が の所定の位置にスナップするため、実際にはこれは必要ありませんsliderDistanceChanged)

于 2013-02-18T12:48:50.773 に答える