收藏 分销(赏)

【无限互联】IOS开发之自定义圆环式Slider.doc

上传人:s4****5z 文档编号:8820127 上传时间:2025-03-03 格式:DOC 页数:6 大小:236.47KB 下载积分:10 金币
下载 相关 举报
【无限互联】IOS开发之自定义圆环式Slider.doc_第1页
第1页 / 共6页
【无限互联】IOS开发之自定义圆环式Slider.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
前言 · 这里实现的是一个圆环形式的Slider滑动条效果。封装了EFCircularSlider类,利用该类可实现的效果有:基本的圆环滑动效果、双重圈滑动点的圆环滑动条效果,以及当下流行的滑动选择时间效果。 EFCircularSlider框架简介 · 由于滑块是一个标准的UIControl,所以EFCircularSlider是一个集成UIControl的类。 · 该类绘制了两个空心圆,一个作为初始滑动条,一个用来填充滑动条,手柄拖动时,根据三角函数计算出当前手柄点所在的地方,绘制弧线,覆盖在原初始滑动条之上。滑动手柄的样式可选择,还可根据需要添加文字标签,优美的改变了UISlider的外观。 · 滑块的实现通过UIControl的以下协议方法: o //开始跟踪触摸 § -(BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; o //继续跟踪触摸 § -(BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; o //结束跟踪触摸 § -(void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; [objc] view plaincopy 1. #pragma mark - UIControl functions   2. //开始跟踪触摸   3. -(BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {   4.     [super beginTrackingWithTouch:touch withEvent:event];   5.        6.     return YES;   7. }   8.    9. //继续跟踪触摸   10. -(BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {   11.     [super continueTrackingWithTouch:touch withEvent:event];   12.        13.     CGPoint lastPoint = [touch locationInView:self];   14.     [self moveHandle:lastPoint];   15.     [self sendActionsForControlEvents:UIControlEventValueChanged];   16.        17.     return YES;   18. }   19.    20. //结束跟踪触摸   21. -(void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {   22.     [super endTrackingWithTouch:touch withEvent:event];   23.        24.     if(_snapToLabels && labelsEvenSpacing != nil) {   25.         CGPoint bestGuessPoint;   26.         float minDist = 360;    //距离   27.         for (int i=0; i<[labelsEvenSpacing count]; i++) {   28.             //在圆上得百分比   29.             CGFloat percentageAlongCircle = i/(float)[labelsEvenSpacing count];   30.             //度数   31.             CGFloat degreesForLabel = percentageAlongCircle * 360;   32.             if(abs(fixedAngle - degreesForLabel) < minDist) {   33.                 minDist = abs(fixedAngle - degreesForLabel);   34.                 bestGuessPoint = [self pointFromAngle:degreesForLabel + 90 + 180];   35.             }   36.         }   37.         CGPoint centerPoint = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);   38.         angle = floor(AngleFromNorth(centerPoint, bestGuessPoint, NO));   39.         _currentValue = [self valueFromAngle];   40.         [self setNeedsDisplay];   41.     }   42. }   EFCircularSlider框架的使用 · 导入框架:                   #import "EFCircularSlider.h" · 基本用法:     [objc] view plaincopy 1. EFCircularSlider* circularSlider = [[EFCircularSlider alloc] initWithFrame:CGRectMake(50, 180, 220, 220)];   2. [circularSlider addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventValueChanged];   3. [self.view addSubview:circularSlider];   上述代码就能实现EFCircularSlider框架中封装的功能,使用简单,效果优美。 · 定义全局变量:  [objc] view plaincopy 1. EFCircularSlider *_minuteSlider;   2. EFCircularSlider *_hourSlider;   · 初始化Slider [objc] view plaincopy 1. _minuteSlider = [[EFCircularSlider alloc] initWithFrame:CGRectMake(10, 170, 300, 300)];   2. _hourSlider = [[EFCircularSlider alloc] initWithFrame:CGRectMake(55, 220, 210, 210)];   · 访问UISlider的值 [objc] view plaincopy 1. _minuteSlider.lineWidth = 8;        //设置线宽   2. _minuteSlider.minimumValue = 0;     //设置最小值   3. _minuteSlider.maximumValue = 60;    //设置最大值   [objc] view plaincopy 1. _hourSlider.lineWidth = 12;     //设置线宽   2. _hourSlider.minimumValue = 0;   //设置最小值   3. _hourSlider.maximumValue = 12;  //设置最大值   4. _hourSlider.snapToLabels = NO;  //设置标签不对齐   · 改变Slider外观显示的颜色 [objc] view plaincopy 1. _minuteSlider.unfilledColor = [UIColor colorWithRed:23/255.0f green:47/255.0f blue:70/255.0f alpha:1.0f];   2. _minuteSlider.filledColor = [UIColor colorWithRed:155/255.0f green:211/255.0f blue:156/255.0f alpha:1.0f];   3.    4. _hourSlider.unfilledColor = [UIColor colorWithRed:23/255.0f green:47/255.0f blue:70/255.0f alpha:1.0f];   5. _hourSlider.filledColor = [UIColor colorWithRed:98/255.0f green:243/255.0f blue:252/255.0f alpha:1.0f];   · 设置文字标签 [objc] view plaincopy 1. [_minuteSlider setInnerMarkingLabels:@[@"5", @"10", @"15", @"20", @"25", @"30", @"35", @"40", @"45", @"50", @"55", @"60"]];   2.     _minuteSlider.labelFont = [UIFont systemFontOfSize:14.0f];   3.     _minuteSlider.labelColor = [UIColor colorWithRed:76/255.0f green:111/255.0f blue:137/255.0f alpha:1.0f];   4.    5.     [_hourSlider setInnerMarkingLabels:@[@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"11", @"12"]];   6.     _hourSlider.labelFont = [UIFont systemFontOfSize:14.0f];   7.     _hourSlider.labelColor = [UIColor colorWithRed:127/255.0f green:229/255.0f blue:255/255.0f alpha:1.0f];   · 改变手柄样式 [objc] view plaincopy 1. _minuteSlider.handleType = doubleCircleWithOpenCenter;   2. _minuteSlider.handleColor = _minuteSlider.filledColor;   3.    4. _hourSlider.handleType = bigCircle;   5. _hourSlider.handleColor = _hourSlider.filledColor;   · 设置Slider的行为 [objc] view plaincopy 1. [_minuteSlider addTarget:self action:@selector(minuteDidChange:) forControlEvents:UIControlEventValueChanged];   2.    3. [_hourSlider addTarget:self action:@selector(hourDidChange:) forControlEvents:UIControlEventValueChanged];                       为Slider添加方法,当Slider的值改变时就会触发该方法。 效果图:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服