使用CAShapeLayer与UIBezierPath画出想要的图形
2014-05-22 11:08
405 查看
使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形
步骤:
1、新建UIBezierPath对象bezierPath
2、新建CAShapeLayer对象caShapeLayer
3、将bezierPath的CGPath赋值给caShapeLayer的path,即caShapeLayer.path = bezierPath.CGPath
4、把caShapeLayer添加到某个显示该图形的layer中
下面的小例子是一个环形的progress代码,有具体的使用方法
.h文件:
.m文件
#import "KACircleProgressView.h"
@implementation KACircleProgressView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
转载自:http://blog.csdn.net/volcan1987/article/details/9969455
步骤:
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
转载自:http://blog.csdn.net/volcan1987/article/details/9969455
相关文章推荐
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- ios 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- IOS Core Animation Advanced Techniques-使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形 -- 下载进度条
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- 使用CAShapeLayer与UIBezierPath画出想要的图形(转)