在运行时更改 UISlider 的最小值和最大值
Posted
技术标签:
【中文标题】在运行时更改 UISlider 的最小值和最大值【英文标题】:Changing a UISlider's minimum and maximumValues during runtime 【发布时间】:2011-08-01 21:07:10 【问题描述】:如何在 UISlider 的 minimum 和 maximumValues 更改后(在运行时)更新其 value 属性?
考虑以下代码:
1 UILabel 连接到一个 IBOutlet - 标签
1 个 UISlider(默认设置 min=0,max=1)连接到 IBOutlet - 滑块和 IBAction - valueChanged
1 按钮连接到 IBAction - buttonTouch
以及以下两个 IBAction 实现:
- (IBAction)valueChanged:(id)sender
label.text=[NSString stringWithFormat:@"%f",slider.value];
- (IBAction)buttonTouch:(id)sender
slider.maximumValue=4;
slider.minimumValue=2;
label.text=[NSString stringWithFormat:@"%f",slider.value];
当我将滑块移动到某个位置时,它会正确更新。
但是,当我通过触发 buttonTouch IBAction 更改滑块的最小值和最大值时,slider.value 属性不会改变 - 它仍然显示旧值(介于 0 和 1 之间)。因此更改最小值和最大值属性不会对 value 属性产生直接影响。
之前:
最小值=0 值=0.5 最大值=1
之后:
min=2 value=0.5 max=4
这应该是 3!
我想您可以根据您对值的了解来计算新值,旧设置的最小值和最大值以及新设置的最小值和最大值,但这似乎不是一个好的解决方案(请参见下面的公式)
newValue = oldvalue / (oldmax - oldmin) * (newmax - newmin) + newmin
【问题讨论】:
【参考方案1】:您应该手动更新该值。 UIKit 不能也不会猜测当最小和最大限制发生变化时如何处理该值。
是否应该在边缘截断?它应该是新范围内的近似值吗?还有更多可能的解决方案,但您希望使用这种特殊情况下的解决方案。 UIKit 做出了不做选择的明智选择,而是让您自己决定该怎么做。
还有一条黄金法则(除了少数例外),更改一个属性不应影响另一个属性。仅允许操作方法更改多个状态。也许您应该将自己的方法添加为类别:-(void)[UISlider setMinimumValue:(CGFloat)maximumValue:(CGFloat)adjustingValueForNewRange:(BOOL)]
。
【讨论】:
谢谢。类别非常适合!以上是关于在运行时更改 UISlider 的最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章