滴滴里面有一个下单完成之后等待界面的倒计时转圈的视图...




就是这个...


原理:

通过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(简书作者)

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

仿滴滴抢单倒计时的Demo的更多相关文章

  1. Flutter 仿滴滴出行App

    绿色出行 Flutter 仿滴滴出行App 地图:采用高德地图,仅简单完成了部分功能,基础地图,地址检索,逆地理编码. 界面:仿滴滴主界面,地图中心请求动效果,服务tabs展开效果,地址检索界面,城市 ...

  2. 毫秒倒计时小Demo

    Demo截图: Demo:Demo 上代码: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  3. Android自定义View——仿滴滴出行十大司机评选活动说明

    滴滴出行原版图 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 仿图 ? ? ? ? ? ? 1.分 ...

  4. 仿糯米弹框效果demo

    代码例如以下: <!doctype html> <html lang="en"> <head> <meta charset="U ...

  5. C# 仿360悬浮球开发demo程序

    https://files.cnblogs.com/files/wohexiaocai/%E4%BB%BF360%E5%8A%A0%E9%80%9F%E5%99%A8.zip

  6. js 实现仿 淘宝 五星评价 demo

    <style> @font-face { font-family: 'iconfont'; /* project id 247957 */ src: url('//at.alicdn.co ...

  7. html5的audio实现高仿微信语音播放效果Demo

    HTML部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  8. nodejs+react构建仿知乎的小Demo

    一.命令行进入指定项目文件夹 二.相关命令安装环境和项目工具 npm init npm install react -- save npm install -g gulp npm install -- ...

  9. 简单的计时器 (倒计时)--html Demo

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...

随机推荐

  1. ucsc 文件格式说明

    链接附带的是ucsc各种格式文件的说明,以后遇到新类型的文件可以先来这里看看! https://www.genome.ucsc.edu/FAQ/FAQformat.html

  2. 无忧代理免费ip爬取(端口js加密)

    起因 为了训练爬虫技能(其实主要还是js技能-),翻了可能有反爬的网站挨个摧残,现在轮到这个网站了:http://www.data5u.com/free/index.shtml 解密过程 打开网站,在 ...

  3. 利用Filter和拦截器,将用户信息动态传入Request方法

    前言: 在开发当中,经常会验证用户登录状态和获取用户信息.如果每次都手动调用用户信息查询接口,会非常的繁琐,而且代码冗余.为了提高开发效率,因此就有了今天这篇文章. 思路: 用户请求我们的方法会携带一 ...

  4. JavaScript 注释

    JavaScript 注释可用于提高代码的可读性. JavaScript 注释 JavaScript 不会执行注释. 我们可以添加注释来对 JavaScript 进行解释,或者提高代码的可读性. 单行 ...

  5. 自己创建一个android studio在线依赖compile

    我正参加2016CSDN博客之星评选麻烦帮下 奖品我随机送给投票者(写一个随机数抽取) http://blog.csdn.net/vote/candidate.html?username=qfanmi ...

  6. 全面剖析Redis Cluster原理和应用

    全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最 ...

  7. gradle 入门介绍

    gradle 简介 基于Groovy实现的自动化构建工具,比maven好的一点在于不用写复杂的xml文件.使用script就可以. gradle 专业名词 从一个build.gradle 文件开始,b ...

  8. shell编程--流程控制for,do-while,if-then,break,continue,case等

    2.5 流程控制 2.5.1 if语法 1.语法格式 if condition then     statements [elif condition     then statements. ..] ...

  9. CSS3 滤镜学习

    html篇 样式篇 grayscale sepia saturate hue-rotate invert opactiy brightness contrast blur drop-shadow 综合 ...

  10. setting.py

    """ Django settings for sitea project. For more information on this file, see https:/ ...