UISlider,设置不同范围的图像

我有一个UISlider,我基本上把它分成5个部分。

0 <= x < .2 .2 <= x < .4 .4 <= x < .6 .6 <= x < .8 .8 <= x <= 1 

我试图与另一个scrollView放大,我有这样,当我移动滑块,scrollView缩放,当我捏在scrollView,滑块移动同步。

当我在viewDidLoad中初始化滑块时,我为UIControlStateNormal和UIControlStateSelected创build了不同的thumbImages,像这样:

 if ([self.navigatorSlider value] >= 0 && [self.navigatorSlider value] < .2) { [self.navigatorSlider setThumbImage:[UIImage imageNamed:@"firstZoom.png"] forState:UIControlStateNormal]; [self.navigatorSlider setThumbImage:[UIImage imageNamed:@"firstZoom.png"] forState:UIControlStateSelected]; } 

我为上面提到的5个不同的部分做了这个。 然而,在IBAction方法中,我已经为滑块,我需要再次设置thumbImages进行相同的检查。 同样在我的handleZoom方法中,我也需要在该方法中设置ThumbImage。 难道我做错了什么? 我觉得我应该可以在某处设置这些值,并且当滑块发生更改时,图像将自动更改,无论是处理滑块本身,还是放大scrollView并使用滑块的setValue方法。

思考?

看看UISlider提供的属性,你可以得到一个非常强烈的感觉,虽然这个类是为了让你定制它的外观而devise的,但是当用户调整它的时候dynamic地改变控件的外观可能不是devise者想到的。 否则,他们会包括你build议的那种机制:一种将不同的图像与值的范围联系起来的手段。

如果您想简化您的方法,首先想到的是使用KVO观察滑块。 如果每次更新滑块的值时都可以收到通知,则可以在一个位置更新拇指图像。 不幸的是,它看起来像UISlider不完全支持KVO 。

接下来我会考虑创build自己的滑块控件。 这不是火箭科学 – 所有你需要的是绘制控制,在上面画拇指,并让拇指在一个维度上滑动。 如果你把拇指作为控件其余部分的子视图,那简直就是小菜一碟。 然后,您可以添加KVO支持,或者一路走来支持不同范围的不同的拇指图像。

如果你不想这样做,你可能可以inheritanceUISlider的子类来添加你的图像数组,范围数组和覆盖-setValue:来利用它们。

最后,你现在得到的并不是那么糟糕。 如果您在动作和-handleZoom方法中都重复了这些代码,那就不太好了,但是将通用代码分解为可从两个地方调用的适当方法应该很简单。

KVO的另一种select是使用通知模式。 注册您感兴趣的对象(例如,在值更改时要更新的任何对象)以接收通知。 当您的滑块更改值时,请使用新值发布通知。