iOS 绘图-UIBezierPath
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 绘图-UIBezierPath相关的知识,希望对你有一定的参考价值。
参考技术A即UIBezierPath在drawRect中的使用,在实际中,我们多使用UIBezierPath来自定义视图。
效果
UIBezierPath与CAShapeLayer的结合,是我们开发中最常见的,功能很强大。
CAShapeLayer与UIBezierPath的关系 :
CAShapeLayer中shape代表形状的意思,所以需要形状才能生效
贝塞尔曲线可以创建基于矢量的路径,而UIBezierPath类是对CGPathRef的封装
贝塞尔曲线给CAShapeLayer提供路径,CAShapeLayer在提供的路径中进行渲染。路径会闭环,所以绘制出了Shape
用于CAShapeLayer的贝塞尔曲线作为path,其path是一个首尾相接的闭环的曲线,即使该贝塞尔曲线不是一个闭环的曲线
例如设置圆角:
自定义视图
效果
iOS---实现在屏幕上实时绘图的简单效果---CAShaperLayer和UIBezierPath的简单运用
首先,声明几个属性
@property(nonatomic,strong)UIBezierPath * beizer;
@property(nonatomic,assign)CGPoint startPoint;
@property(nonatomic,assign)CGPoint movePoint;
@property(nonatomic,strong)CAShapeLayer * shapelayer;
然后注册屏幕上的拖拽事件,并初始化贝塞尔曲线和CAShapeLayer
- (void)viewDidLoad { [super viewDidLoad]; UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panTouch:)]; [self.view addGestureRecognizer:pan]; self.beizer = [UIBezierPath bezierPath]; [self initCAShaper]; } -(void)initCAShaper { self.shapelayer = [CAShapeLayer new]; self.shapelayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); self.shapelayer.fillColor = nil; self.shapelayer.lineCap = kCALineCapRound; self.shapelayer.strokeColor = [UIColor cyanColor].CGColor; self.shapelayer.lineWidth =2; [self.view.layer addSublayer:self.shapelayer]; }
紧接着处理拖拽事件
-(void)panTouch:(UIPanGestureRecognizer *)pan { _startPoint = [pan locationInView:self.view]; if(pan.state == UIGestureRecognizerStateBegan) { [self.beizer moveToPoint:_startPoint]; } if(pan.state == UIGestureRecognizerStateChanged) { _movePoint = [pan locationInView:self.view]; [_beizer addLineToPoint:_movePoint]; self.shapelayer.path = _beizer.CGPath; } }
大功告成。如图
以上是关于iOS 绘图-UIBezierPath的主要内容,如果未能解决你的问题,请参考以下文章