2014-01-23 70 views
6

我想在UISlider的拇指上方定位一個額外的UIView。要做到這一點,我需要拇指圖像的寬度。在iOS6中,這工作正常。我可以使用:如何閱讀UISlider拇指圖像的大小

CGFloat thumbWidth = self.navSlider.currentThumbImage.size.width; 

(如圖這樣的回答:How to get the center of the thumb image of UISlider

這iOS7返回0.0F。我也嘗試使用它閱讀它:

UIImage *thumb = [self.navSlider thumbImageForState:UIControlStateNormal]; 

但拇指結果爲零。

是否可以讀取默認滑塊圖像的大小?或者我會不得不找到它,設置一個常數,以及蘋果以後如何改變它?

回答

6

currentThumbImage屬性的文件說:

如果沒有自定義圖像的拇指已經使用 setThumbImage設置:forState:方法,這個屬性包含值爲零。 在這種情況下,接收者使用 繪圖的默認拇指圖像。

thumbImageForState:的文檔是不太清楚:

返回值與指定的狀態,或 零相關聯,如果適當的圖像不能被檢索的拇指圖像。

我想你可能會運氣不佳,試圖找出默認的拇指大小。如何安裝一個「自定義」的拇指圖像,看起來完全像系統圖像?這將解決蘋果從你身邊改變它的問題。

+1

我希望這樣做沒有自定義圖像,但我想這可能是唯一的出路。至少它在跨操作系統看起來是一致的。謝謝! –

0

您需要使用setThumbImage forState設置初始縮略圖。這適用於我在iOS7中正常工作,並返回圖像的正確寬度。滑塊設置在故事板中並通過IBOutlet連接。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.slider setThumbImage:[UIImage imageNamed:@"tick.jpg"] forState:UIControlStateNormal]; 

    float check = self.slider.currentThumbImage.size.width; 
    NSLog(@"Check is %f", check); 

} 
+0

我希望能夠在不爲滑塊提供自定義圖像的情況下做到這一點。這可能是通過這種方式得以實現的唯一方法。 –

6

我在子類中使用:

CGRect trackRect = [self trackRectForBounds:self.bounds]; 
CGRect thumbRect = [self thumbRectForBounds:self.bounds trackRect:trackRect value:0]; 
CGSize thumbSize = thumbRect.size; 
+1

智能答案。然而,我們仍然可以獲得沒有子類的大小或大拇指的直徑: 'var trackRect = slider.trackRectForBounds(slider.bounds) var thumbRect = slider.thumbRectForBounds(slider.bounds,trackRect:trackRect,value:slider .value) ' 使用'slider?.superview.convertRect(thumbRect,fromView:slider)'在superview的座標中使用它。 – bubuxu

+0

太棒了! –