2009-09-16 34 views
10

我的目標是創建一個35像素高的拇指圖像更大的UISlider。更大的UISlider確定,但跟蹤區域問題

我子類UISlider和添加的方法:

我更大的拇指也顯示:

- (CGRect)trackRectForBounds:(CGRect)bounds 
{ 
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50); 
} 

然後我用setThumbImage設置吞形象從我的控制器。

我遇到的問題是跟蹤區在19px高度時仍然是相同的,如何將其擴展到50?

感謝

T.

回答

0

我相信你可能想看看thumbRectForBounds:trackRect:value:

+2

不幸的是,UISlider不使用此函數的返回來確定滑塊的觸摸區域。 – 2010-06-30 22:56:25

+0

如何調用thumbRectForBounds方法,它是UISlider的Delegate方法嗎? – 2015-04-29 14:24:52

31

一個長期存在的問題與iPhone OS」 UISlider控制,你不能讓它高。更具體地說,您可以通過爲其大拇指和軌道指定較高的圖像來使其看起來更高,但觸摸區域保持小至23px的高度。

Michael Patricios has published a way使默認滑塊更容易觸摸,並且該技術的變體可以處理更大的滑塊。你需要做的是子類UISlider,並在你的類中重寫pointInside:

// How many extra touchable pixels you want above and below the 23px slider 
#define SIZE_EXTENSION_Y 10 

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event { 
    CGRect bounds = self.bounds; 
    bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y); 
    return CGRectContainsPoint(bounds, point); 
} 

在Interface Builder中設置滑塊使用新UISlider子類,你現在有一個43px高度可觸摸滑塊。

+2

小改正:我想你想傳遞一個負的SIZE_EXTENSION_Y值給CGRectInset,使矩形更大。 – Kelan 2010-08-31 00:51:00

+3

Kelan是正確的,值爲-10的效果很好。 – 2011-01-07 05:53:16

+1

謝謝,謝謝,謝謝!設置爲-10這個工作完美!我試圖自己解決這個問題一段時間,而且這個工作很好。 – 2011-04-06 22:35:17

11

我使用這個解決方案:)

CGRect sliderFrame = self.mySlider.frame;  
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame]; 
+0

中使用此解決方案似乎比@Allen Pike更簡單。它似乎也在工作。是否有理由相信他的回答優於你的回答? – marcgg 2012-10-06 19:53:29

+1

@marcgg我認爲這只是因爲我稍後添加了我的答案... – alexhajdu 2012-10-10 13:03:58

+0

這可以工作,但它也會垂直偏移滑塊,但這很容易修復。 – 2012-10-30 18:22:11

8

增加UISlider拇指點擊區域通過增加UISlider框架的高度。這種方法避免了任何偏移並且隨後需要更正滑塊框架。

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

    //expand slider hit area 
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10); 

} 
+0

這個答案比上面兩個要容易得多。很棒。謝謝! – chazzwozzer 2013-08-27 20:16:02

+0

真棒解決方案 – malaki1974 2015-04-25 00:13:29