2010-08-15 32 views
0

我有一個滑塊,其值在0到100之間。我可以在模擬器中輕鬆停止任意數量的滑動,但在我的設備上,滑塊會變得有點跳動,並且可能會移動一個或兩個刻度釋放你的手指。我想讓我的滑塊像iPod中的多速擦洗器一樣工作,但是我找不到UISlider的「預包裝版本」。一旦我已經抓住了滑塊的拇指,我似乎無法捕捉到我的觸摸的y座標。或者這可能是一個敏感問題。任何幫助將非常感激。 感謝爲iPhone編程變速滑塊

回答

0

我會寫我自己的UISlider子類,並實現所有觸控操作自己(即則hitTest:withEvent:,return [self pointInside:point withEvent:event] ? self : nil;,使用UISlider只是做渲染(你可以得到相關的最小/最大rects通過調用thumbRectForValue:或任何它被稱爲)

我不知道你的意思是「我似乎無法捕捉我的觸摸的y座標」,但它不是(很容易)可以訪問一次觸摸事件子視圖已經「捕獲」了它,一個破解是自己處理所有的觸摸,然後向前觸摸開始/移動/結束/取消。

+0

感謝您指點我在正確的方向.. – 2010-08-17 17:06:42

1

如果我明白了你的意思,笨拙地隨着觸摸的相對y位置以可變速度移動。我沒有使用洗地控制器。

的UISlider控制從UIResponder繼承,所以你可以繼承它並添加自己的

– touchesBegan:withEvent: 
– touchesMoved:withEvent: 
– touchesEnded:withEvent: 

touchesMoved將是特別感興趣的,因爲它會給你y座標。不要忘了致電super並將事件傳遞給響應者鏈。

如果你還沒有收到任何事件 - 也許拇指在前面並且正在攔截它們。在滑塊上放置一個常規的透明UIView子類,截取觸摸並獲取座標,並再次傳遞事件。在滑塊的動作功能

int progressAsInt = ((int)((completionSlider.value + 2.5f)/5.0f) * 5); 
[sender setValue:progressAsInt animated:YES]; 

做出UISlider只設置了拇指離散值,就像制動器音量控制:

我用這個代碼一次。您可以使用由檢測到的觸摸的y位置決定的不同值,以改變您允許的粒度,或者影響實際觸摸事件表示的移動量。

+0

感謝您的洞察力,讓我走在正確的方向。 – 2010-08-17 17:08:21