iPhone: UISlider динамически меняет максимальное значение - PullRequest
1 голос
/ 31 марта 2011

Скраб UISlider не перемещается, когда я меняю его свойство MaximumValue.Я динамически изменяю свойство MaximumValue UISlider B путем очистки UISlider A. Поэтому, когда UISlider A изменяется, например, для 1, UISlider B имеет MaximumValue + = 1.UISlider B должен автоматически обновить свою позицию очистки, но это не так.Если я затем нажимаю на UISlider B scrub, он обновляется.

Какое решение для этого?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

У меня была именно эта проблема: большой палец UISlider не перемещается на дорожке, когда MaximumValue устанавливается программно, даже если вы явно вызываете setValue. Например:

// Setup:
UISlider *a = [[UISlider alloc] init];
a.minimumValue = 1.00;
a.maximumValue = 100.00;
[a setValue: 50.00];

/* CORRECT: The thumb is in the centre of the track, at position "50.00":

1 --------------------------- () --------------------------- 100
                         a.value == 50
*/ 

// Set maximumValue programmatically:
[a setMaximumValue: 1000.00];

/* INCORRECT: The thumb is still in the centre of the track: position "500.00":

1 --------------------------- () --------------------------- 1000
                         a.value == 50
    |<---- It should be here (!)
*/ 

// Call setValue explicitly, to no avail:
[a setValue: 50.00];

/* INCORRECT: The thumb is still in the centre of the track: position "500.00":

1 --------------------------- () --------------------------- 1000
                         a.value == 50
    |<---- It should be here (!)
*/ 

Единственный способ, которым я смог решить эту проблему (после нескольких часов поиска решения в Интернете, в книгах и экспериментах), - изменить значение UISlider, что, похоже, заставляет UISlider перерисовываться. Мне это не нравится, но это работает:

[a setValue:a.value+1 animated:NO];
[a setValue:a.value-1 animated:NO];

/* (The thumb is now at position "50.00"):

1 -- () ---------------------------------------------------- 1000
  a.value == 50
*/

Если кто-нибудь знает лучший способ сделать это, я хотел бы прочитать об этом. (-:

0 голосов
/ 31 марта 2011

Если вы хотите изменить значение ползунка, вам нужно использовать:

- (void)setValue:(float)value animated:(BOOL)animated

MaximumValue изменяет только верхнее значение, которое может представлять большой палец

...