- 做項目的時候碰到的一個需求:需要Slider可以點擊滑動并且Slider的滑塊需要移動到固定的四個位置;
- 其效果可以參考網易新聞客戶端的調整字體。
一、實現步驟
1.初始化UISlider
- (UISlider *) fontSlider {
if (!_fontSlider) {
_fontSlider = [[UISlider alloc] initWithFrame:CGRectMake(15,64, CGRectGetWidth(self.bounds) - 15 * 2, 44)];
_fontSlider.minimumValue = 0;
_fontSlider.maximumValue = 3;
_fontSlider.backgroundColor = [UIColor clearColor];
[_fontSlider setThumbImage:[UIImage imageNamed:"thumb.png"] forState:UIControlStateNormal];
_fontSlider.minimumTrackTintColor = [UIColor clearColor];
_fontSlider.maximumTrackTintColor = [UIColor clearColor];
[_fontSlider setValue:0 animated:YES];
//添加滑動事件
[_fontSlider addTarget:self
action:@selector(fontSliderValueChanged:)
forControlEvents:UIControlEventValueChanged];
//添加點擊手勢
[_fontSlider addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fontSliderTapped:)]];
}
return _fontSlider;
}
2.事件和手勢
- (void) fontSliderValueChanged:(id)sender {
UISlider *slider = sender;
//將slider的value+0.5然后取整(向下取整),那么index只能是0,1,2和3這四個數字了,所以slider只能在這四個位置上跳動
NSUInteger index = (NSUInteger)(slider.value + 0.5);
[self.fontSlider setValue:sliderValue animated:YES];
}
- (void) fontSliderTapped:(UITapGestureRecognizer *)tapGesture {
CGPoint touchPoint = [tapGesture locationInView:self.fontSlider];
CGFloat value = (self.fontSlider.maximumValue - self.fontSlider.minimumValue) * (touchPoint.x / self.fontSlider.frame.size.width );
NSUInteger index = (NSUInteger)(value + 0.5);
[self.fontSlider setValue:sliderValue animated:YES];
}