Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 更改UISlider';s运行时的最小值和最大值_Iphone_Objective C_Cocoa Touch_Uislider - Fatal编程技术网

Iphone 更改UISlider';s运行时的最小值和最大值

Iphone 更改UISlider';s运行时的最小值和最大值,iphone,objective-c,cocoa-touch,uislider,Iphone,Objective C,Cocoa Touch,Uislider,在UISlider的最小值和最大值发生更改后(在运行时),如何更新其value属性 考虑以下代码: 1个连接到IBOutlet的UILabel-标签 1个UISlider(默认设置最小值=0,最大值=1)连接到一个IBOutlet滑块和一个IBAction-valueChanged 1个按钮连接到iAction-buttonTouch 以及以下两种iAction实现: - (IBAction)valueChanged:(id)sender { label.text=[NSString s

在UISlider的最小值和最大值发生更改后(在运行时),如何更新其value属性

考虑以下代码:

1个连接到IBOutlet的UILabel-标签

1个UISlider(默认设置最小值=0,最大值=1)连接到一个IBOutlet滑块和一个IBAction-valueChanged

1个按钮连接到iAction-buttonTouch

以及以下两种iAction实现:

- (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 iAction更改滑块的最小值和最大值时,slider.value属性不会更改-它仍然显示旧值(0和1之间)。因此,更改“最小”和“最大”属性不会对“值”属性产生直接影响


之前: 最小值=0值=0.5最大值=1

之后: 最小值=2值=0.5最大值=4

这应该是3


我想你可以根据你对旧设置的最小值和最大值以及新设置的最小值和最大值的了解来计算新值,但这似乎不是一个好的解决方案(见下面的公式)


newValue=oldvalue/(oldmax-oldmin)*(newmax-newmin)+newmin

您应该手动更新该值。当最小值和最大值限值发生变化时,UIKit不能也不会猜测如何处理该值

它的边缘应该被截断吗?它应该是新范围内的近似值吗?有很多可能的解决方案,但你希望在这个特殊的情况下。UIKit做出了一个明智的选择:别做选择,而是让你自己决定该怎么做


还有一条黄金法则(除了少数例外),即更改一个属性不应影响另一个属性。仅允许操作方法更改多个状态。也许您应该将自己的方法添加为一个类别:
-(void)[UISlider setMinimumValue:(CGFloat)maximumValue:(CGFloat)Adjusting ValueforNewRange:(BOOL)]
您应该手动更新该值。当最小值和最大值限值发生变化时,UIKit不能也不会猜测如何处理该值

它的边缘应该被截断吗?它应该是新范围内的近似值吗?有很多可能的解决方案,但你希望在这个特殊的情况下。UIKit做出了一个明智的选择:别做选择,而是让你自己决定该怎么做


还有一条黄金法则(除了少数例外),即更改一个属性不应影响另一个属性。仅允许操作方法更改多个状态。也许您应该将自己的方法添加为一个类别:
-(void)[UISlider setMinimumValue:(CGFloat)maximumValue:(CGFloat)Adjusting ValueforNewRange:(BOOL)]

谢谢。分类是完美的!谢谢分类是完美的!