CircleProgress 理财产品的 进度 圆形,CAShapeLayer

2024-02-26 07:38

本文主要是介绍CircleProgress 理财产品的 进度 圆形,CAShapeLayer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//
//  CCCircleView.m
//  WWCycleProgress
//
//  Created by 王威 on 16/8/19.
//  Copyright © 2016年 WW. All rights reserved.
//

#import "CCCircleView.h"


#define GreenColor [UIColor colorWithRed:98/255.0 green:200/255.0 blue:166/255.0 alpha:1]
// rgb颜色转换(16进制->10进制)
#define KHexColor(hexValue) [UIColor \
colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 \
green:((float)((hexValue & 0xFF00) >> 8))/255.0 \
blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0]
#define kFont(size) [UIFont systemFontOfSize:size]

@interface CCCircleView()
@property(nonatomic, strong) UILabel *labProgress;
//红色的layer
@property(nonatomic, strong) CAShapeLayer *progressLayer;
//灰色的layer
@property(nonatomic, strong) CAShapeLayer *grayProgressLayer;
@end


@implementation CCCircleView
{
    float _p;
    NSTimer *_timer;
}

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
         [self drawProgressCircleWithEndAngle:-M_PI_2 + M_PI * 2 isGrayCircle:YES];
    }
    return self;
}

- (void)setProgress:(double)progress {
    _progress = progress;
    NSString *s = @"%";
    self.labProgress.text = [NSString stringWithFormat:@"%0.1f%@",progress*100,s];
    if (_progress == 1.0) {
       self.labProgress.text = @"100%";
    }
    [self performSelector:@selector(delay) withObject:nil afterDelay:0.5];
    [self drawProgressCircleWithEndAngle:- M_PI_2 + M_PI * 2* (_progress) isGrayCircle:NO];
}

- (void)delay {
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.020 target:self selector:@selector(drawProgress) userInfo:nil repeats:YES];
}

- (void)drawProgress {
    if (_p > self.progress + 0.01) {
        [_timer invalidate];
        _timer = nil;
        return;
    }
    [self drawProgressCircleWithEndAngle:- M_PI_2 + M_PI * 2* (_p) isGrayCircle:NO];
    _p += 0.05;
}

- (void)drawProgressCircleWithEndAngle:(CGFloat)endAngle isGrayCircle:(BOOL)isGrayCircle  {
    CGPoint center = CGPointMake(self.frame.size.width / 2, self.frame.size.width / 2);
    CGFloat radius = self.frame.size.width / 2;
    CGFloat startA = -M_PI_2;
    CGFloat endA = endAngle;
    
    CAShapeLayer *layer;
    if(isGrayCircle) {
        layer = self.grayProgressLayer;
    }
    else {
        layer = self.progressLayer;
    }
    
    UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];
    layer.path =[path CGPath];
}

- (UILabel *)labProgress {
    if (!_labProgress) {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(1, 0, self.frame.size.width-2, self.frame.size.height)];
        label.textAlignment = NSTextAlignmentCenter;
        label.center = CGPointMake(self.frame.size.width / 2, self.frame.size.width / 2);
        label.textColor = KHexColor(0xf23f3f);
        label.font = kFont(14);
        [self addSubview:label];
        _labProgress = label;
    }
    return _labProgress;
}

- (CAShapeLayer *)grayProgressLayer {
    if(!_grayProgressLayer) {
        _grayProgressLayer = [CAShapeLayer layer];
        _grayProgressLayer.frame = self.bounds;
        _grayProgressLayer.fillColor = [[UIColor clearColor] CGColor];
        _grayProgressLayer.strokeColor = [KHexColor(0xffe8e8) CGColor];
        _grayProgressLayer.opacity = 1;
        _grayProgressLayer.lineCap = kCALineCapRound;
        _grayProgressLayer.lineWidth = 4.0;
        [self.layer addSublayer:_grayProgressLayer];
    }
    return _grayProgressLayer;
}

- (CAShapeLayer *)progressLayer {
    if(!_progressLayer) {
        _progressLayer = [CAShapeLayer layer];
        _progressLayer.frame = self.bounds;
        _progressLayer.fillColor = [[UIColor clearColor] CGColor];
        _progressLayer.strokeColor = [KHexColor(0xf23f3f) CGColor];
        _progressLayer.opacity = 1;
        _progressLayer.lineCap = kCALineCapRound;
        _progressLayer.lineWidth = 4.0;
        [self.layer addSublayer:_progressLayer];
    }
    return _progressLayer;
}

这篇关于CircleProgress 理财产品的 进度 圆形,CAShapeLayer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748109

相关文章

PMBOK® 第六版 规划进度管理

目录 读后感—PMBOK第六版 目录 规划进度管理主要关注为整个项目期间的进度管理提供指南和方向。以下是两个案例,展示了进度管理中的复杂性和潜在的冲突: 案例一:近期,一个长期合作的客户因政策要求,急需我们为多家医院升级一个小功能。在这个过程中出现了三个主要问题: 在双方确认接口协议后,客户私自修改接口并未通知我们,直到催进度时才发现这个问题关于UI设计的部分,后台开发人员未将其传递给

http网络请求与下载进度

Http_request 目录 一、XMLHttpRequest 在使用 Fetch API 进行网络请求时,原生的 Fetch API 并不直接支持获取下载进度的功能,因为 Fetch API 主要是基于 Promise 的,它主要关注于请求的成功或失败,以及响应数据的处理,而不直接处理像进度跟踪这样的底层细节。 不过,你可以通过一些技巧或方法间接实现下载进度的跟踪。以下是一些常用的方法:

PMBOK® 第六版 项目进度管理知识领域

目录 读后感—PMBOK第六版 目录 提到“进度”,大家都能直观理解其含义。有统计指出,现在项目的延迟交付比例越来越高,并且这一趋势持续上升。造成项目延期的原因是多方面的,常见的原因之一是在项目初期,由于时间充裕,往往会做一些与项目无关或超出项目范围的工作,导致项目后期不得不疯狂赶工。 另一种常见问题是过分关注单个活动的精确执行,而忽略了对整个项目进度的宏观把控,这种做法可能会导致团队失

【CanMV K230】圆形检测

【CanMV K230】圆形检测 什么是圆形检测圆形检测应用领域1.工业自动化2.机器人视觉3.医学图像分析4.目标识别5.质量检测6.研究和开发 K230应用相关函数官方例程HDMI屏幕使用圆形检测 本篇内容: 什么是圆形检测圆形检测应用领域K230应用(包含相应函数及例程) B站视频链接:已做成合集 (求去点赞,或者发个弹幕也行呀。C友) 抖音链接:已做成合集(

圆形缓冲区-MapReduce中的

这篇文章来自一个读者在面试过程中的一个问题,Hadoop在shuffle过程中使用了一个数据结构-环形缓冲区。 环形队列是在实际编程极为有用的数据结构,它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列。 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用

【HarmonyOS】头像圆形裁剪功能之手势放大缩小,平移,双击缩放控制(三)

【HarmonyOS】头像裁剪之手势放大缩小,平移,双击缩放控制(三) 一、DEMO效果图: 二、开发思路: 使用矩阵变换控制图片的放大缩小和平移形态。 通过监听点击手势TapGesture,缩放手势PinchGesture,拖动手势PanGesture进行手势操作的功能实现。 通过对矩阵变换参数mMatrix的赋值,将矩阵变换参数赋值给image控件。实现手势操作和图片操作的同步。

iOS CAShapeLayer精讲

CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性。但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义。 关于UIBezierPath,请阅读文章iOS UIBezierPth精讲 基本知识 看看官方说明: /* The shape layer draws a cubic Bezier spline in its coordinate

echarts进度

echarts图表集 let numdata=["I级",'II级','III级','IV级','V级','劣V级']let pricedata=40option = {backgroundColor: '#0f375f',title: {show: false,text: '',left: 'center',top: '30%',textStyle: {color: '#00D5FF

android 自定义进度波形图

在网上找了一些相关资料,有些数据内容没有步骤,显得比较难懂,这边就写一个简单的自定义波形图先上图: 效果如图所示 自定义 view 分几个步骤: 一个类继承自 View 或 ViewGroup;重写构造方法初始化方法:用于初始化画笔、自定义属性等重写 onMeasure()方法:用于测量屏幕尺寸,长宽的模式重写 onLayout()方法:布局查看重写 onDraw()方法:绘制界面写

app版本更新,通知形式显示安装包下载进度

也是公司的项目需要,就稍微研究了下,参考网上一些不错的思路,但其适用版本都比较早,所以通知做了适配了Android 8.0,及权限问题等问题。 原理;下载apk过程中,发起一个通知,并不断发起最新进度的相同ID的通知,覆盖上一个通知,达到显示当前下载进度的效果。 demo已上传:https://download.csdn.net/download/u013370255/10603681 下面