模仿荷包的一个小小的滑动块
TamiPryor
9年前
<p>一直在用荷包这App,感觉这个App整体真的不错,一直想做一个滑块,无意中看到这个,今天有时间就做了一个小Demo ,话不多说,上图片。。。。</p> <p><strong>效果图</strong></p> <p style="text-align:center"><img src="https://simg.open-open.com/show/ea680f65c7fe37c7036d814398dfbc5a.png"></p> <p style="text-align:center">EA680F65C7FE37C7036D814398DFBC5A.jpg</p> <p><strong>效果图 </strong></p> <p style="text-align:center"><img src="https://simg.open-open.com/show/4800067be2eb5a421493b5dbc3abbc60.gif"></p> <p style="text-align:center">2.gif</p> <p><strong>部分代码 自定义的CustomSlider.H</strong></p> <pre> <code class="language-objectivec">/** 回调 */ @property (nonatomic,copy)changeValueBlock block; /** 初始化 @param frame 位置 @param defaultIndx 默认选中那个点 */ - (instancetype)initWithFrame:(CGRect)frame WithDefaultIndx:(CGFloat)defaultIndx WithDefaultPicName:(NSString *)PicNameStr;</code></pre> <p><strong>部分代码 自定义的CustomSlider.M</strong></p> <pre> <code class="language-objectivec">- (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 ====================== 创建子控件 ====================== - (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); //设置默认位置 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); }]; }</code></pre> <p><strong>部分代码 控制器</strong></p> <pre> <code class="language-objectivec">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(@"当前index-->>>==%d",index); }; [self.view addSubview:customSlider];</code></pre> <p> </p> <p> </p> <p>来自:http://www.jianshu.com/p/44cce6d646ca</p> <p> </p>