模仿荷包的一個(gè)小小的滑動(dòng)塊


一直在用荷包這App,感覺(jué)這個(gè)App整體真的不錯(cuò),一直想做一個(gè)滑塊,無(wú)意中看到這個(gè),今天有時(shí)間就做了一個(gè)小Demo ,話不多說(shuō),上圖片。。。。


#######效果圖 <荷包原始效果 動(dòng)態(tài)的可以自己下載一個(gè)看看>


EA680F65C7FE37C7036D814398DFBC5A.jpg

#######效果圖 <彬哥效果 >


2.gif

#######部分代碼 自定義的CustomSlider.H


/** 回調(diào) */
@property (nonatomic,copy)changeValueBlock block;

/**
 初始化

 @param frame       位置
 @param defaultIndx 默認(rèn)選中那個(gè)點(diǎn)

 */
- (instancetype)initWithFrame:(CGRect)frame WithDefaultIndx:(CGFloat)defaultIndx WithDefaultPicName:(NSString *)PicNameStr;

#######部分代碼 自定義的CustomSlider.M

- (instancetype)initWithFrame:(CGRect)frame WithDefaultIndx:(CGFloat)defaultIndx WithDefaultPicName:(NSString *)PicNameStr
{
    if (self = [super initWithFrame:frame  ]) {
        picName = PicNameStr;
        [self setUpSubViews];
        self.defaultIndx=defaultIndx;
    }
    return self;
}

#pragma mark  ====================== 創(chuàng)建子控件 ======================
- (void)setUpSubViews
{
    UILabel * bgLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, CustomHeight/2,CustomWidth , 2)];
    bgLabel.backgroundColor = [UIColor orangeColor];
    bgLabel.userInteractionEnabled = YES;
    CGFloat smallLableWidth = PointWidth;
    for (int i =0; i< PointNum; i++) {
        UILabel * smallPoitLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0,8, 8)];
        smallPoitLabel.center = CGPointMake(DistanceWidth + (smallLableWidth * i) , 1);
        smallPoitLabel.layer.cornerRadius = 4;
        smallPoitLabel.clipsToBounds = YES;
        smallPoitLabel.backgroundColor =[UIColor orangeColor];
        [bgLabel addSubview:smallPoitLabel];
        
    }
    [self addSubview:bgLabel];
    
    //圖片
    UIImageView * sliderImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, CustomHeight/2 +1, 40, 40)];
    sliderImageView.image = [UIImage imageNamed:picName];
    [self addSubview:sliderImageView];
    self.sliderImageView = sliderImageView;
    
}


-(void)setDefaultIndx:(CGFloat)defaultIndx{
     CGFloat withPress=defaultIndx/(PointNum -1);
    //設(shè)置默認(rèn)位置
    self.sliderImageView.center  = CGPointMake(DistanceWidth + (PointWidth)*(defaultIndx -1), CustomHeight/2 +1);
     _pointX=withPress*PointWidth;
    _sectionIndex=defaultIndx;
}



-(BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
    
    [self changePointX:touch];
    _pointX=_sectionIndex*(PointWidth) + DistanceWidth;
    [self refreshSliderFrame];
    return YES;
}

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
   [self changePointX:touch];
   [self refreshSliderFrame];
   [self sendActionsForControlEvents:UIControlEventValueChanged];
    return YES;
}

-(void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
   [self changePointX:touch];
   _pointX=_sectionIndex*(PointWidth) + DistanceWidth;
    if (self.block) {
        self.block((int)_sectionIndex);
    }
    [self refreshSliderFrame];

}

-(void)changePointX:(UITouch *)touch{
    
    CGPoint point = [touch locationInView:self];
    _pointX=point.x;
    if (point.x<DistanceWidth) {
        _pointX=DistanceWidth;
    }else if (point.x>CustomWidth - DistanceWidth ){
        _pointX=CustomWidth  - DistanceWidth;
    }
    //四舍五入
    double pX = (int)_pointX;
    double pY = (int)PointWidth;
    _sectionIndex= round(pX / pY);
}

-(void)refreshSliderFrame{
    [UIView animateWithDuration:0.5 animations:^{
        self.sliderImageView.center=CGPointMake(_pointX, CustomHeight/2 + 1);
    }];
}

#######部分代碼 控制器

  
    CustomSlider * customSlider = [[CustomSlider alloc]initWithFrame:CGRectMake(20, 100,[UIScreen mainScreen].bounds.size.width-40 , 100) WithDefaultIndx:2 WithDefaultPicName:@"4"];
    customSlider.backgroundColor = [UIColor clearColor];
     customSlider.block = ^(int index){
        //做自己想做的事情
         NSLog(@"當(dāng)前index-->>>==%d",index);
         
    };
    
    [self.view addSubview:customSlider];

2016年09月22日 如有好的想法希望提出建議,未完待續(xù)。。。。后續(xù)傳上GitHub 需要源碼留言郵箱

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,126評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,414評(píng)論 4 61
  • 畢業(yè)兩年了,期間也換過(guò)幾份工作,現(xiàn)在穩(wěn)定下來(lái)了,在一家汽車(chē)配件公司,年初2月份剛進(jìn)公司是做采購(gòu)計(jì)劃員,11月底被經(jīng)...
    明明如月520閱讀 290評(píng)論 5 6
  • 查看后臺(tái)運(yùn)行的程序 vi放入后臺(tái)無(wú)法與用戶交互 無(wú)意義 放入后臺(tái) top與前臺(tái)有交互(給用戶看) 無(wú)法運(yùn)行 所以都...
    子木同閱讀 268評(píng)論 0 0

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