iOS UISlider數(shù)值與滑塊聯(lián)動(dòng)

級(jí)別:★☆☆☆☆
標(biāo)簽:「UISlider」「QiSlider」「UISlider自定義」
作者: Xs·H
審校: QiShare團(tuán)隊(duì)

項(xiàng)目中有個(gè)需求是在滑動(dòng)slider的時(shí)候要在滑塊上方實(shí)時(shí)顯示數(shù)值,而且數(shù)值要跟著滑塊動(dòng)。實(shí)現(xiàn)效果如下:

演示效果

在寫代碼之前有兩個(gè)思路:

1、在slider的superView上add一個(gè)valueLabel,找到slider的滑塊view(thumbView),在slider的valueChanged方法中根據(jù)thumbView相對(duì)于slider的superView的frame調(diào)整valudeLabel的frame和text。使用此思路實(shí)現(xiàn)的效果會(huì)出現(xiàn)滑動(dòng)過快時(shí)label晃動(dòng)的現(xiàn)象(有點(diǎn)跟不上滑塊的意思)。

2、找到slider的thumbView,在thumbView上add一個(gè)valueLabel,在slider的valueChanged方法中調(diào)整valueLabel的text。
使用此思路實(shí)現(xiàn)的效果比較符合需求。

按照思路2自定義QiSlider部分代碼如下:

#import "QiSlider.h"

@interface QiSlider ()

/*! @brief slider的thumbView */
@property (nonatomic, strong) UIView *thumbView;
/*! @brief 顯示value的label */
@property (nonatomic, strong) UILabel *valueLabel;

@end

@implementation QiSlider

- (instancetype)initWithFrame:(CGRect)frame {
    
    if (self = [super initWithFrame:frame]) {
       
        [self addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
    }
    return self;
}


#pragma mark - Setter functions

- (void)setValueText:(NSString *)valueText {
    
    if (![_valueText isEqualToString:valueText]) {
        _valueText = valueText;
        
        self.valueLabel.text = valueText;
        [self.valueLabel sizeToFit];
        self.valueLabel.center = CGPointMake(self.thumbView.bounds.size.width / 2, -self.valueLabel.bounds.size.height / 2);
        
        if (!self.valueLabel.superview) {
            [self.thumbView addSubview:self.valueLabel];
        }
    }
}


#pragma mark - Getter functions

- (UIView *)thumbView {
    
    if (!_thumbView && self.subviews.count > 2) {
        _thumbView = self.subviews[2];
    }
    return _thumbView;
}

- (UILabel *)valueLabel {
    
    if (!_valueLabel) {
        _valueLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        _valueLabel.textColor = _valueTextColor ?: self.thumbTintColor;
        _valueLabel.font = _valueFont ?: [UIFont systemFontOfSize:14.0];
        _valueLabel.textAlignment = NSTextAlignmentCenter;
    }
    return _valueLabel;
}


#pragma mark - Action functions

- (void)sliderValueChanged:(QiSlider *)sender {
    
    if (_valueChanged) {
        _valueChanged(sender);
    } else {
        sender.valueText = [NSString stringWithFormat:@"%.1f", sender.value];
    }
}
@end

工程代碼可從QiSlider的Github庫中獲取。


關(guān)注我們的途徑有:
QiShare(簡(jiǎn)書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公眾號(hào))

推薦文章:iOS strong和copy的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,171評(píng)論 3 119
  • { 11、核心動(dòng)畫 需要簽協(xié)議,但是系統(tǒng)幫簽好 一、CABasicAnimation 1、創(chuàng)建基礎(chǔ)動(dòng)畫對(duì)象 CAB...
    CYC666閱讀 1,691評(píng)論 2 4
  • iphone開發(fā)筆記 退回輸入鍵盤 - (BOOL) textFieldShouldReturn:(id)text...
    愛易寒曲易散閱讀 682評(píng)論 0 1
  • 今天晚上,還在上班,一個(gè)經(jīng)常給我搞店子裝修的男人發(fā)來一條微信:老板,在么?我說在,他說:能給我發(fā)20元紅包么?急用...
    韻秋閱讀 282評(píng)論 0 2
  • 前言: 這近六千字中的大部分是我在17日在去機(jī)場(chǎng)路上和飛機(jī)上寫的??謶质侨绱苏鎸?shí),步步逼近,帶著尖銳的形狀切割...
    燕子貓貓閱讀 1,918評(píng)論 1 6

友情鏈接更多精彩內(nèi)容