博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 使用 CAShapeLayer 与贝塞尔曲线实现进度圆的动画
阅读量:5783 次
发布时间:2019-06-18

本文共 2301 字,大约阅读时间需要 7 分钟。

hot3.png

iOS 使用 CAShapeLayer 与贝塞尔曲线实现进度圆的动画

iOS 使用 CAShapeLayer 与贝塞尔曲线实现进度圆的动画

1.创建一个继承于 view 的 CircleView 视图

2.根据需求设置参数

/***  需要确定的参数 起始值 / 接收变化的值 / 边框宽 /边框颜色*//***  起始值  (0 ~ 1)*/@property (nonatomic,assign) CGFloat startValue;/***  线条宽*/@property (nonatomic,assign) CGFloat linewidth;/***  线条颜色*/@property (nonatomic,strong) UIColor *lineColor;/***  变化值*/@property (nonatomic,assign) CGFloat value;- (void)startAniamtion;- (void)endAnimation;//3.在. m 文件//创建一个延展@interface CircleView ()@property (nonatomic,strong) CAShapeLayer *shape;@end- (instancetype)initWithFrame:(CGRect)frame{self = [super initWithFrame:frame];if (self) {_shape = [CAShapeLayer layer];_shape.frame = self.bounds;//创建出贝塞尔曲线UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect:self.bounds ];_shape.path = circlePath.CGPath;_shape.fillColor = [UIColor clearColor].CGColor;_shape.lineWidth = 1.f;_shape.strokeColor = [UIColor redColor].CGColor;_shape.strokeEnd = 0.f;[self.layer addSublayer:_shape];}return self;}@synthesize startValue = _startValue;-(void)setStartValue:(CGFloat)startValue{_startValue = startValue;_shape.strokeEnd = startValue;}-(CGFloat)startValue{return _startValue;}@synthesize linewidth = _linewidth;-(void)setLinewidth:(CGFloat)linewidth{_linewidth = linewidth;_shape.lineWidth = linewidth;}-(CGFloat)linewidth{return _linewidth;}@synthesize lineColor = _lineColor;-(void)setLineColor:(UIColor *)lineColor{_lineColor = lineColor;_shape.strokeColor = lineColor.CGColor;}-(UIColor *)lineColor{return _lineColor;}@synthesize value = _value;- (void)setValue:(CGFloat)value{_value = value;_shape.strokeEnd = value;}-(CGFloat)value{return _value;}- (void)startAniamtion{CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];animation.fromValue = @0;animation.toValue = @1;animation.repeatCount = MAX_CANON;animation.duration = 5.f;[_shape addAnimation:animation forKey:nil];}//4.ok, 这里已经创建完成,去控制器里面实现吧!_circleView = [[CircleView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];_circleView.center = self.view.center;_circleView.startValue = 0.f;[self.view addSubview:_circleView];[self performSelector:@selector(animationAction) withObject:nil afterDelay:2];- (void)animationAction{[_circleView startAniamtion];}//综上,只是简单的实现进度圆

 

转载于:https://my.oschina.net/alanTang123/blog/824901

你可能感兴趣的文章
克服大数据集群的挑战
查看>>
PostgreSQL并发控制(MVCC, 事务,事务隔离级别)
查看>>
12月19日一周一次【Python基础语法】
查看>>
DM***的第二阶段OSPF
查看>>
python socket编程
查看>>
20180702搭建青岛RAC记录
查看>>
安装部署TIDB分布式数据库
查看>>
Spring Security OAuth 实现OAuth 2.0 授权
查看>>
linux文件及简单命令学习
查看>>
dubbo源码分析-架构
查看>>
新 Terraform 提供商: Oracle OCI, Brightbox, RightScale
查看>>
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
IT兄弟连 JavaWeb教程 JSP与Servlet的联系
查看>>
Windows phone 8 学习笔记
查看>>
linux并发连接数:Linux下高并发socket最大连接数所受的各种限制
查看>>
洛谷——P2176 [USACO14FEB]路障Roadblock
查看>>
详解区块链中EOS的作用。
查看>>
我的友情链接
查看>>
mysql-error 1236
查看>>
sshd_config设置参数笔记
查看>>