仿滴滴抢单倒计时的Demo
2016-07-20 12:13
323 查看
滴滴里面有一个下单完成之后等待界面的倒计时转圈的视图...
就是这个...
原理:
通过CAShapeLayer层添加到自己自定义的视图layer上...
设置ShapeLayer的path...
他的路劲绘制一般通过UIBezierPath配合设置...
通过layer的StrokeEnd,StrokeStart设置path路径上的起点和终点...
可以直接通过设置这两个点就有平滑的东西效果...
先看效果...
看左边视图...
分成三部分...
红色进度变化的一个ShapeLayer...
底部灰色背景的一个ShapeLayer...
头部绿色方向的一个ShapeLayer...
主要是绿色的那部分是通过实时计算它的strokestart和strokeend来控制他始终就是那么一个长度...
说一下计算过程...
图中黄色为头部那个点(s1)...
灰色为底部大圆的四分之一(s2)...
要计算出这个s1的strokeStart,strokeEnd之间的差值就是需要计算出s2所在s1中周长所占的比例...
这个比例如果转化成弧度或者角度比的话就可以通过a角度来计算...
根据余弦定理:
就可得出a的弧度值...
换算比例就是stroke的start和end的差值...
主要代码:
项目下载:http://download.csdn.net/detail/hbblzjy/9581081
其中的CAShapeLayer-Progress....
如果需要的话 可以自己去改改...
文/T_aa(简书作者)
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
就是这个...
原理:
通过CAShapeLayer层添加到自己自定义的视图layer上...
设置ShapeLayer的path...
他的路劲绘制一般通过UIBezierPath配合设置...
通过layer的StrokeEnd,StrokeStart设置path路径上的起点和终点...
可以直接通过设置这两个点就有平滑的东西效果...
先看效果...
看左边视图...
分成三部分...
红色进度变化的一个ShapeLayer...
底部灰色背景的一个ShapeLayer...
头部绿色方向的一个ShapeLayer...
主要是绿色的那部分是通过实时计算它的strokestart和strokeend来控制他始终就是那么一个长度...
说一下计算过程...
图中黄色为头部那个点(s1)...
灰色为底部大圆的四分之一(s2)...
要计算出这个s1的strokeStart,strokeEnd之间的差值就是需要计算出s2所在s1中周长所占的比例...
这个比例如果转化成弧度或者角度比的话就可以通过a角度来计算...
根据余弦定理:
cosa = (b*b+c*c-a*a)/(2*b*c)
就可得出a的弧度值...
换算比例就是stroke的start和end的差值...
主要代码:
//计算这个point的start和end所占用这个角弧度值 //余弦定理 cosc = (a*a + b*b - c*c)/(2*a*b); float radian = cosf((self.radius*self.radius+self.radius*self.radius - (self.pointRadius*2)*(self.pointRadius*2)))/(2*self.radius*self.radius); //头部点所占路劲的周长 float offsetProgress = radian/(M_PI*2); _pointAnimatedLayer.strokeStart = _strokeEnd-offsetProgress; _pointAnimatedLayer.strokeEnd = MIN(_strokeEnd, 1);
项目下载:http://download.csdn.net/detail/hbblzjy/9581081
其中的CAShapeLayer-Progress....
如果需要的话 可以自己去改改...
文/T_aa(简书作者)
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- file和file文件流
- android studio 中 .9.png的制作
- 六 cocos2dx(3.X)中使用shader
- NSObject的load和initialize方法(转)
- NYOJ 118 Prim求次小生成树
- iOS7之后statusbar不能更改
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 2
- 转: memcached Java客户端spymemcached的一致性Hash算法
- 设置oracle开机自启动
- 小记——linux文件名与链接
- android之switch控件的用法
- Retrofit 2.1 入门
- Java-enum
- Android 如何编写基于编译时注解的项目
- 固定成本、可变成本、沉没成本、机会成本
- Android图片资源优化工具
- reset css 的方法总结!
- volatile关键字解析
- CSDN 博客 排名
- Codeforces #363 Vacations