最近项目需求,做的一个标识正在直播的小动画,代码如下:

#import "YGIsOnLiveAnmationView.h"

@interface YGIsOnLiveAnmationView ()

@property (strong, nonatomic) CAShapeLayer * progressLayer;
@property (strong, nonatomic) CAShapeLayer * triangleLayer;

@property (strong, nonatomic) CABasicAnimation *rotateAnimation;

@property (assign, nonatomic) CGFloat progressLineWidth;

@property (strong, nonatomic) UIColor * progressLineColor;

@end

@implementation YGIsOnLiveAnmationView

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

- (instancetype)initWithFrame:(CGRect)frame lineWidth:(CGFloat)lineWidth  lineColor:(UIColor *)lineColor {
    
    self  = [self initWithFrame:frame];
    
    if (self) {
        
        self.progressLineWidth = lineWidth;
        self.progressLineColor = lineColor;
        
        [self.layer addSublayer:self.progressLayer];
        [self.layer addSublayer:self.triangleLayer];
    }
    
    return self;
}

- (void)startProgressAnimation {
    [self.progressLayer addAnimation:self.rotateAnimation forKey:@"group"];
}

//画三角形
- (CAShapeLayer *)triangleLayer {
    
    if (!_triangleLayer) {
        
        _triangleLayer     = [CAShapeLayer layer];

UIBezierPath *path = [UIBezierPath bezierPath];
        
        CGFloat X = self.center.x;
        CGFloat Y = self.center.y;
        
        [path moveToPoint   :CGPointMake(X-3, Y-5)];
        [path addLineToPoint:CGPointMake(X-3, Y+5)];
        [path addLineToPoint:CGPointMake(X+5, Y)];
        
        [path closePath];
        [self.progressLineColor setFill];
        [path fill];
        
        _triangleLayer.path = path.CGPath;
    }
    return _triangleLayer;
}

//画进度
- (CAShapeLayer *)progressLayer {
    if (!_progressLayer) {
        _progressLayer = [CAShapeLayer layer];
        
        CGFloat width           = CGRectGetWidth(self.frame);
        CGFloat height          = CGRectGetHeight(self.frame);
        
        _progressLayer.frame    = CGRectMake(0, 0, width, height);
        _progressLayer.position = CGPointMake(width/2.0,height/2.0);
        
        UIBezierPath *aPath     = [UIBezierPath bezierPathWithArcCenter:CGPointMake(width/2.0, height/2.0)
                                                             radius:(width - self.progressLineWidth)/2.0
                                                         startAngle:0
                                                           endAngle:M_PI_4 * 7
                                                          clockwise:YES];
        [aPath stroke];
        
        _progressLayer.path        = aPath.CGPath;
        _progressLayer.fillColor   = [UIColor clearColor].CGColor;
        _progressLayer.lineWidth   = self.progressLineWidth;
        _progressLayer.strokeColor = self.progressLineColor.CGColor;
        _progressLayer.lineCap     = kCALineCapRound;
    }
    return _progressLayer;
}

- (CABasicAnimation *)rotateAnimation {
    if (!_rotateAnimation) {
        _rotateAnimation                     = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        _rotateAnimation.timingFunction      = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
        _rotateAnimation.toValue             = @(M_PI * 2);
        _rotateAnimation.fromValue           = @(0);
        _rotateAnimation.duration            = 1;
        _rotateAnimation.removedOnCompletion = NO;
        _rotateAnimation.repeatCount         = FLT_MAX;
    }
    return _rotateAnimation;
}

@end

贝塞尔结合CAShapeLayer绘制路线,CABasicAnimation实现的小动画相关推荐

  1. Android中贝塞尔曲线的绘制方法

    贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋.一般的矢量图形软件常 ...

  2. react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...

    如图:项目中百度地图的应用添加起始点.终点并绘制路线 在展示代码的时候首先展示一下后台返回给我的接口 { 其中position_list参数代表的是用户的行驶点, area参数代表的是服务区的坐标点, ...

  3. android高德地图轨迹纠偏,RoutePath-(高德地图)根据定位点绘制路线+轨迹纠偏

    轨迹纠偏的作用就是去掉绘制路线时候两个定位点之间产生的毛刺和尖角,使路线看起来更加的圆滑,正常 IMG_0323.PNG - (void) DrawLine{ CLLocationCoordinate ...

  4. 百度地图绘制途径点/分段绘制路线

    百度地图绘制途径点 百度地图Api地址: https://lbsyun.baidu.com/ 公司项目中要求绘制物流信息,需体现途径点 但是我在其中没有找到有关绘制路线,设定途径点的相关说明 有一个非 ...

  5. 计算机图形学中的曲线问题——贝塞尔曲线的绘制

    贝塞尔曲线的绘制 由于 CSDN 的博客修改字数的限制,我们不得不将这一部分放到一个新的博客中.原文详见: GGN_2015 计算机图形学中的曲线问题 贝塞尔曲线的几何作图法 在上面介绍儿时的回忆中, ...

  6. 高德地图小程序步行路线显示_微信小程序之:小程序接入高德地图SDK

    前言 最近在捣腾小程序,想开发一个自己的小程序,过一把独立开发的瘾. 自己设计,自己搞数据,自己找图标,自己决定要或者不要什么功能,完全跟着心走,目前体验下来,感觉还是蛮爽的.比在公司产品要你做什么你 ...

  7. 用Principle绘制小动画的方法

    Principle可以实现快速绘制小动画,但它最大的作用在于交互点击上的完美呈现,学会这个小动画基本就掌握了这款软件的快速运用了. Principle这款软件交互友好,可视化操作,调节方便,适用于简单 ...

  8. mapbox 绘制路线并展示路线长度

    背景:上一篇写过mapbox如何绘制线路并导出为kml文件,后面又加了个需求,需要展示所绘制的路线长度,这里就需要用到turf了 1. 引入turf,可以在线引入,也可以下载到本地引入 import ...

  9. vue高德地图(三):搜索地点并标记;绘制路线

    <!-- 地图 --><div><!-- 查询地点--><div class="searchWrap"><input type ...

最新文章

  1. Linux 小知识翻译 - 「命令行的提示符」
  2. final关键字最全了解
  3. BZOJ 3884 上帝与集合的正确用法 (欧拉定理)
  4. PHP自学4——通过函数将数组数据输出到html的Table标签中(使用函数的例子)
  5. npm 安装less插件_IDEA编译less插件LESS CSS Compiler的安装
  6. 关于OC中的block自己的一些理解(二)
  7. 流行趋势-立体感和艺术剪纸风海报美妆设计
  8. ubuntu mysql ftp_Ubuntu服务器安装ftp服务和MySQL数据库配置的一些记录
  9. mysql奢姿密码_mysql trim函数和oracle有区别吗
  10. minio获取上传文件_Springboot集成Minio实现对象存储服务
  11. java基础-软件简述
  12. 简易计算器数码管c语言,简易计算器(数码管显示)
  13. 如何使用Bootbox ?
  14. java对人物画像分级_绘制用户画像——根据用户行为计算标签权重介绍及实现...
  15. 数据分析需要学习哪些课程?
  16. css图片背景之雪碧图的使用
  17. 狮子,狼,羊群的故事
  18. 每日一问-ChapGPT-20230416-中医基础-经络
  19. 环境搭建--谷粒商城笔记一
  20. 消毒碗柜行业市场经营管理及未来前景展望分析

热门文章

  1. lispbox 安装运行.sh的时候出现 lispbox.sh: 2: lispbox.sh: Bad substitution
  2. 利益驱动 需求驱动 技术驱动 谁才是真正的驱动力?
  3. 手机自带的显示基站命令
  4. Nginx proxy_cache 使用示例
  5. Ajax实现无刷新树
  6. datagrid分页问题(前后跳页)《控件版》
  7. Namespace(命名空间)的使用
  8. Google Test(GTest)使用方法和源码解析——自定义输出技术的分析和应用
  9. 设计模式之访问者模式(Visitor)摘录
  10. 【Qt】QtCreator中配置clang-format