2013-02-18 3 views
0

Это, как я сейчас делаю этоКак сделать приложение UISlider мгновенным?

- (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?

ответ

0

enter image description here

(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

Это нормально.

Ho

+1

Какова актуальность изображения? – ekhumoro

+0

@JimThio - этот -но-принятый-ответ от 3-летнего вопроса - это просто повторение вопроса? С красивым, но неуместным образом? – foundry

2

Я предполагаю, что каждое из этих действий связано с рассматриваемым UISlider. Первый инициируется valueChanged, а второй - 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 

     } 

Simplify sliderNoLongerTouched

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

(вы на самом деле не нужно это сейчас, так как стоимость защелками на месте в sliderDistanceChanged)

+0

Работает отлично. Довольно мгновенный. –

Смежные вопросы