2012-01-17 56 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的另一種選擇是使用通知模式。註冊您感興趣的對象(例如,當值更改時,您想更新的任何對象)以接收通知。當您的滑塊更改值時,請使用新值發佈通知。