iOS 不同颜色之分段式圆环,段数不固定
2016-03-31 10:32
381 查看
最近美工那边提出一个需求,就是需要展示资产的占比,通过一个圆环展示,于是自己便封装了一个。段数不限制,只需赋值所占比例及该段的颜色即可。
直接上代码:#import"ColorCircleView.h"
float a=301.25,b=235.23,c=452.65;
ColorCircleView *view = [[ColorCircleViewalloc]
initWithFrame:CGRectMake(100,200,
100,
100)];
view.circleArray =@[
@{
@"strokeColor":[UIColorredColor],
@"precent" :@(a/(a+b+c))
},
@{
@"strokeColor":[UIColororangeColor],
@"precent" :@(b/(a+b+c))
},
@{
@"strokeColor":[UIColoryellowColor],
@"precent" :@(c/(a+b+c))
}
];
[self.viewaddSubview:view];
运行效果如下:
自定义一个分类继承UIView
下面是.h文件
#import <UIKit/UIKit.h>
@interface ColorCircleView :
UIView
//数组里面装的是字典,,字典里有两个key -> strokeColor和precent
@property (nonatomic,assign)
NSArray *circleArray;
@end
.m文件
#import "ColorCircleView.h"
@interface
ColorCircleView ()
@property (nonatomic,strong)
CAShapeLayer *shapeLayer;
@end
@implementation ColorCircleView
- (void)initType
{
__blockfloat a =
0;
[self.circleArrayenumerateObjectsUsingBlock:^(NSDictionary
*obj,NSUInteger idx,
BOOL *_Nonnull stop) {
//创建出CAShapeLayer
self.shapeLayer = [CAShapeLayerlayer];
self.shapeLayer.frame =CGRectMake(0,0,
self.bounds.size.width,self.bounds.size.height);//设置shapeLayer的尺寸和位置
// self.shapeLayer.position = self.view.center;
self.shapeLayer.fillColor = [UIColorclearColor].CGColor;//填充颜色为ClearColor
//设置线条的宽度和颜色
self.shapeLayer.lineWidth =10.0f;
self.shapeLayer.strokeColor = [obj[@"strokeColor"]CGColor];
//创建出圆形贝塞尔曲线
UIBezierPath *circlePath = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(0,0,
self.bounds.size.width,self.bounds.size.height)];
//让贝塞尔曲线与CAShapeLayer产生联系
self.shapeLayer.path = circlePath.CGPath;
self.shapeLayer.strokeStart = a;
self.shapeLayer.strokeEnd = [obj[@"precent"]floatValue]
+ a;
a = self.shapeLayer.strokeEnd;
//添加并显示
[self.layeraddSublayer:self.shapeLayer];
//添加圆环动画
CABasicAnimation *pathAnimation = [CABasicAnimation
animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration =
1.0;
pathAnimation.fromValue =
@(0);
pathAnimation.toValue =
@(1);
pathAnimation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseOut];
[self.shapeLayer
addAnimation:pathAnimation
forKey:@"strokeEnd"];
}];
}
- (void)setCircleArray:(NSArray *)circleArray
{
_circleArray = circleArray;
[selfinitType];
}
@end
以上便是全部,,如有更好的方法和建议,欢迎联系,,非常感谢!!!!
相关文章推荐
- IOS远程推送和本地推送的理解
- 关于iOS开发中info.plist文件的解读
- Xcode7--免证书真机调试
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)
- socket.io_-ios使用
- iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现
- frame和bounds的区别
- 一个3D ar打飞机的游戏iOS源码
- iOS之应用发布中的一些细节
- iOS App中实现播放音效和音乐功能的简单示例
- iOS集成银联
- iOS 第三方框架-MBProgressHUD
- iOS之数据持久化方案
- IOS编程学习:property、nonatomic, retain,weak,strong用法
- IOS编程学习:property、nonatomic, retain,weak,strong用法
- 读取iOS设备中应用的数据
- iOS之获取屏幕尺寸
- iOS开发笔记--去掉tableview中section的headerview粘性
- iOS之There was an internal API error错误
- 【代码笔记】iOS-获取字符串的宽度,高度