2012-05-16 26 views
5

Tôi muốn kích hoạt một thao tác khi chạm vào một điểm cụ thể trên UISlider bằng cách nhấn chứ không phải bằng cách kéo ngón cái trượt.thay đổi giá trị Uislider khi khai thác tại điểm cụ thể

Làm cách nào để nhấn vào UISlider tại một điểm để đặt giá trị thanh trượt?

Đoạn mã sẽ được đánh giá cao.

+0

Bạn đã thử một cái gì đó một mình? – Zoleas

+0

tôi đã thử bằng cách đặt các nút tùy chỉnh nhưng không đúng cách. Tôi cũng đã cố gắng xác định touchdown và chạm vào các sự kiện bên trong cho thanh trượt nhưng không ai trong số họ hoạt động. – Ronak

Trả lời

2

Hãy thử chức năng UIView touchesbegan nếu v1 là một UIView với nền đơn giản đằng sau đó nơi uislider \

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == v1) 
    { 
    CGPoint location = [touch locationInView:v1]; 
    NSInteger i = location.x; 
    } 

sau đó nhận được tỷ lệ xpoint bằng cách nhân với khung v1 đó là nếu khung v1 x value = 50 và tôi = 5means 10 phần trăm sau đó nhân giá trị tỷ lệ với giá trị thanh trượt để thay đổi giá trị thanh trượt

+1

@ user1389841 Nếu bạn nghĩ câu trả lời là hữu ích, hãy quên rằng bạn có thể chấp nhận câu trả lời. – NAZIK

+2

Bạn cũng có thể sử dụng chức năng di chuyển chạm để trượt sau khi nhấn vào giao diện. – NAZIK

36
UISlider *slider = [[[UISlider alloc] init] autorelease]; 
… 

thiết lập thanh trượt

… 
UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)] autorelease]; 
[slider addGestureRecognizer:gr]; 
- (void)sliderTapped:(UIGestureRecognizer *)g { 
    UISlider* s = (UISlider*)g.view; 
    if (s.highlighted) 
     return; // tap on thumb, let slider deal with it 
    CGPoint pt = [g locationInView: s]; 
    CGFloat percentage = pt.x/s.bounds.size.width; 
    CGFloat delta = percentage * (s.maximumValue - s.minimumValue); 
    CGFloat value = s.minimumValue + delta; 
    [s setValue:value animated:YES]; 
} 
+3

Đừng quên kích hoạt sự kiện cho UIControlEventValueChanged :-) –

+4

Như @DanVanWinkle đã nói đừng quên kiểm soát sự kiện kiểm soát, nếu không giao diện người dùng của bạn sẽ cập nhật nhưng chương trình phụ trợ của bạn sẽ không. Để kích hoạt cuộc gọi sự kiện này ở cuối sliderTapped: [s sendActionsForControlEvents: UIControlEventValueChanged]; –

+1

Có thể thực hiện tương tự với addTarget của UIControl: action: forControlEvents: API không? – rclai

Các vấn đề liên quan