2016-09-16 100 views
0

我在我的項目中使用UISlider。通常,只要我們觸摸並拖動拇指,拇指應該移動。但是,在我的情況下,當我觸摸它的邊緣而沒有觸及它時,拇指移動了。就像這樣:UISlider拇指移動而不觸碰拇指

enter image description here

這裏是我的代碼:

self.slider = [[UISlider alloc] initWithFrame:CGRectMake(30, [UIScreen mainScreen].bounds.size.height - 200, [UIScreen mainScreen].bounds.size.width-30, 30)]; 
[self.view addSubview:self.slider]; 

爲什麼拇指移動以及如何應對的呢?我的目標是,拇指只有在我觸摸並拖動它時纔會移動,而當我觸摸它的邊緣時拇指不會移動。

回答

0

爲此,您需要使用taoGesture和UISlider,所以首先在滑塊對象中添加UITapGestureRecognizer,然後在gestureRecognizer選擇器的action方法中設置其值。

在視圖中添加滑塊後添加以下代碼。

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSliderTap:)]; 
[self.slider addGestureRecognizer:tapGestureRecognizer]; 

現在onSliderTap就可以得到該位置,然後點更新滑塊

- (void)onSliderTap:(UITapGestureRecognizer *)recognizer { 
    float width = self.slider.frame.size.width; 
    CGPoint point = [recognizer locationInView:recognizer.view]; 
    CGFloat sliderX = self.slider.frame.origin.x; 
    float newValue = ((point.x - sliderX) * self.slider.maximumValue)/width; 
    [self.slider setValue:newValue]; 
} 
1

嘗試的價值添加以下代碼:

- (void)viewDidLoad 
{ 

    UITapGestureRecognizer *tapGest = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)]; 
    [slider addGestureRecognizer:tapGest]; 

} 

- (void)sliderTapped:(UIGestureRecognizer *)tapGest 
{ 
     UISlider* slider = (UISlider*)tapGest.view; 
     if (slider.highlighted) 
      return; // tap on thumb, let slider deal with it 
     CGPoint pt = [tapGest locationInView: slider]; 
     CGFloat percentage = pt.x/slider.bounds.size.width; 
     CGFloat delta = percentage * (slider.maximumValue - slider.minimumValue); 
     CGFloat value = slider.minimumValue + delta; 
     [slider setValue:value animated:YES]; 

    }