iPhone:UISlider动态更改maximumValue

时间:2011-03-31 09:03:03

标签: iphone xcode uislider

当我更改其maximumValue属性时,UISlider的scrub不会重新定位。我通过擦除UISlider A来动态更改UISlider B的maximumValue属性。所以当UISlider A被更改为例如1 UISlider B的maximumValue + = 1。 UISlider B应自动更新其擦洗位置,但事实并非如此。如果我按下UISlider B,它会更新。

解决方法是什么?

2 个答案:

答案 0 :(得分:3)

我遇到了这个问题:即使你明确调用setValue,当以编程方式设置maximumValue时,UISlider拇指也不会在轨道上重新定位。例如:

// 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
*/

如果有人知道更好的方法,我很乐意阅读它。 ( - :

答案 1 :(得分:0)

如果要更改滑块的值,则需要使用:

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

maximumValue仅更改拇指可以代表的上限值