CAShapeLayer与UIBezierPath
来源:互联网 发布:廖雪峰python教程 pdf 编辑:程序博客网 时间:2024/05/29 17:46
使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形
步骤:
1、新建UIBezierPath对象bezierPath
2、新建CAShapeLayer对象caShapeLayer
3、将bezierPath的CGPath赋值给caShapeLayer的path,即caShapeLayer.path = bezierPath.CGPath
4、把caShapeLayer添加到某个显示该图形的layer中
下面的小例子是一个环形的progress代码,有具体的使用方法
.h文件:
- #import <QuartzCore/QuartzCore.h>
- #import <UIKit/UIKit.h>
- @interface KACircleProgressView : UIView {
- CAShapeLayer *_trackLayer;
- UIBezierPath *_trackPath;
- CAShapeLayer *_progressLayer;
- UIBezierPath *_progressPath;
- }
- @property (nonatomic, strong) UIColor *trackColor;
- @property (nonatomic, strong) UIColor *progressColor;
- @property (nonatomic) float progress;//0~1之间的数
- @property (nonatomic) float progressWidth;
- - (void)setProgress:(float)progress animated:(BOOL)animated;
- @end
.m文件
- #import "KACircleProgressView.h"
- @implementation KACircleProgressView
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- // Initialization code
- _trackLayer = [CAShapeLayer new];
- [self.layer addSublayer:_trackLayer];
- _trackLayer.fillColor = nil;
- _trackLayer.frame = self.bounds;
- _progressLayer = [CAShapeLayer new];
- [self.layer addSublayer:_progressLayer];
- _progressLayer.fillColor = nil;
- _progressLayer.lineCap = kCALineCapRound;
- _progressLayer.frame = self.bounds;
- //默认5
- self.progressWidth = 5;
- }
- return self;
- }
- - (void)setTrack
- {
- _trackPath = [UIBezierPath bezierPathWithArcCenter:self.center radius:(self.bounds.size.width - _progressWidth)/ 2 startAngle:0 endAngle:M_PI * 2 clockwise:YES];;
- _trackLayer.path = _trackPath.CGPath;
- }
- - (void)setProgress
- {
- _progressPath = [UIBezierPath bezierPathWithArcCenter:self.center radius:(self.bounds.size.width - _progressWidth)/ 2 startAngle:- M_PI_2 endAngle:(M_PI * 2) * _progress - M_PI_2 clockwise:YES];
- _progressLayer.path = _progressPath.CGPath;
- }
- - (void)setProgressWidth:(float)progressWidth
- {
- _progressWidth = progressWidth;
- _trackLayer.lineWidth = _progressWidth;
- _progressLayer.lineWidth = _progressWidth;
- [self setTrack];
- [self setProgress];
- }
- - (void)setTrackColor:(UIColor *)trackColor
- {
- _trackLayer.strokeColor = trackColor.CGColor;
- }
- - (void)setProgressColor:(UIColor *)progressColor
- {
- _progressLayer.strokeColor = progressColor.CGColor;
- }
- - (void)setProgress:(float)progress
- {
- _progress = progress;
- [self setProgress];
- }
- - (void)setProgress:(float)progress animated:(BOOL)animated
- {
- }
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect
- {
- // Drawing code
- }
- */
- @end
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- KACircleProgressView *progress = [[KACircleProgressView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
- [self.view addSubview:progress];
- progress.trackColor = [UIColor blackColor];
- progress.progressColor = [UIColor orangeColor];
- progress.progress = .7;
- progress.progressWidth = 10;
- }
最后上一张效果图:
转载请注明出处,多谢
0 0
- CAShapeLayer与UIBezierPath
- 使用CAShapeLayer与UIBezierPath
- CAShapeLayer与UIBezierPath
- CAShapeLayer与UIBezierPath
- CAShapeLayer与UIBezierPath
- CAShapeLayer与UIBezierPath绘制图形
- CAShapeLayer UIBezierPath
- IOS-CAShapeLayer与UIBezierPath的基本用法
- 使用CAShapeLayer与UIBezierPath画动态柱状图
- CAShapeLayer与UIBezierPath的结合使用
- 根据UIBezierPath与CAShapeLayer画折线
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形 -- 下载进度条
- 使用CAShapeLayer与UIBezierPath画出想要的圆弧形进度条
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- Experimental Physics and Industrial Control System
- flumeng收集日志并存储到HDFS
- HQL和QBC和QBE + hibernate检索方式
- UVA-10635 Prince and Princess
- Java类初始化顺序问题:静态初始化块,非静态初始化块以及构造函数
- CAShapeLayer与UIBezierPath
- iOS手势密码
- Myeclipse8.6 安装 axis2-1.6插件
- UIBezierPath和CAShapeLayer简介
- 存储管理(二):openfiler之accounts
- Python 求两个文本文件以行为单位的交集 并集 差集
- 采药(通过0-1背包问题小试牛刀)
- GDI+ 双缓冲实现
- SQL数据库的基本操作(转载)