2012-01-17 71 views
1

我有一个UISlider,我基本上将它分成5个部分。UISlider,设置不同范围的图像

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

我试图与缩放我有,所以当我移动滑块另一个滚动视图同步此,滚动视图缩放,当我掐上了滚动,滑块移动。

当我初始化我在viewDidLoad中滑块,我创建了UIControlStateNormal和UIControlStateSelected这样不同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方法。

想法?

回答

1

查看UISlider提供的属性,您可以得到一个非常强烈的感觉,即该类旨在让您自定义它的外观,并在用户调整它时动态更改控件的外观可能不是什么设计师想到了。否则,他们会包含您建议的那种机制:一种将不同图像与值范围关联的方法。

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

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

如果您不想这样做,您可以继承UISlider的子类以添加图像阵列,范围数组以及替代-setValue:以利用它们。

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

0

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