2012-12-17 34 views
2

如何在UISlider軌道上獲取事件?我能夠在UISlider的按鈕上獲得事件,但不能按照正確的方式進行。我應該怎麼做呢?在UI滑軌上獲取事件

由於

+0

請你讓我們知道您的Slider軌道意味着什麼呢?你想要滑塊或其他東西的事件? –

+0

滑塊移動的軌道。滑塊有兩部分的拇指和曲目。我正在尋找一個事件,而不是在拇指上點擊賽道。 –

+0

我不認爲你可以直接獲取這些事件,除非你繼承了UISlider類或創建了類似於UISlider的控制器。 –

回答

1

子類的UISlider並覆蓋其touchesBegan:withEvent:方法。從touch事件中獲取點值,並通過相對於滑塊寬度的點的.x值計算它的百分比。

2

這樣做,你需要繼承UISlider和實施,如觸摸事件:的touchesBegan,touchesEnd,touchesCancelled,touchesMoved等

@interface yourSlider:UISlider 
@end 

@implementation yourSlider 
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
    } 

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
    } 

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
    } 

    - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
    } 
@end 
+0

嘿。感謝大家的迴應..我嘗試了子類,但發現它稍長一些,雖然有用,方法。我所做的是我在兩側用相等的透明區域(等於未使用軌道的長度)製作更大的拇指圖像。這擴大了觸摸面積並解決了我的問題。 –

+0

@SahilTyagi:感謝您的評論:) –

1

答案是正確的,但有一種變通方法在這裏,你可以簡單地添加一個清晰的按鈕等於滑塊上的滑塊座標並檢測其上的觸點,然後將X位置轉換爲滑塊值。

- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event 
    { 
     UIView *button = (UIView *)sender; 
     UITouch *touch = [[event touchesForView:button] anyObject]; 
     CGPoint location = [touch locationInView:button]; 
     NSLog(@"Location in button: %f, %f", location.x, location.y); \\ use this x to determine slider's value 

     } 
0

另一個解決方法:

UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self    action:@selector(sliderTapped:)]; 
gr.delegate=self; 
[Slider addGestureRecognizer:gr]; 

-(void)sliderTapped:(UIGestureRecognizer*)g{ 
UISlider* s = (UISlider*)g.view; 
if (s.highlighted) 
    return; 
CGPoint pt = [g locationInView: s]; 
CGFloat value = s.minimumValue + pt.x/s.bounds.size.width * (s.maximumValue - s.minimumValue); 
[s setValue:value animated:YES]; 
}