iOS---實現在螢幕上實時繪圖的簡單效果---CAShaperLayer和UIBezierPath的簡單運用
阿新 • • 發佈:2019-01-23
首先,宣告幾個屬性
@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; } }
大功告成。如圖