美文网首页
iOS 简单的实时绘图功能

iOS 简单的实时绘图功能

作者: Yimmm | 来源:发表于2021-03-17 15:12 被阅读0次

iPad端客户需要做一个实时绘图的功能,因此封装了一个小小的绘图View。

.h
@interface simpleDrawingView : UIView

/// 初始化方法,参数:strokeColor绘图线条颜色,lineWidth绘图线条宽度
- (void)setUpShapeLayerColor:(UIColor *)strokeColor shapeLayerLineWidth:(unsigned int)lineWidth;

@end
.m

#import "simpleDrawingView.h"

@interface simpleDrawingView()

@property (nonatomic, strong) CAShapeLayer * myShapeLayer;
@property (nonatomic, strong) UIBezierPath * myBeizer;
@property (nonatomic, assign) CGPoint startPoint;
@property (nonatomic, assign) CGPoint movePoint;

@end

@implementation simpleDrawingView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTouch:)];
        [self addGestureRecognizer:pan];
        self.myBeizer = [UIBezierPath bezierPath];
    }
    return self;
}

// MARK:初始化方法
- (void)setUpShapeLayerColor:(UIColor *)strokeColor shapeLayerLineWidth:(unsigned int)lineWidth
{
    [self.layer addSublayer:self.myShapeLayer];
    _myShapeLayer.strokeColor = strokeColor.CGColor;
    _myShapeLayer.lineWidth = lineWidth;
}



#pragma mark - getter setter | init 初始化

- (CAShapeLayer *)myShapeLayer
{
    if (!_myShapeLayer)
    {
        _myShapeLayer = [[CAShapeLayer alloc] init];
        _myShapeLayer.frame = self.bounds;
        _myShapeLayer.fillColor = nil;
        _myShapeLayer.lineCap = kCALineCapRound;
    }
    return _myShapeLayer;
}



#pragma mark - Click Event | 点击事件
-(void)panTouch:(UIPanGestureRecognizer *)sender{
    
    _startPoint = [sender locationInView:self];
    
    if (sender.state == UIGestureRecognizerStateBegan) {
        [_myBeizer moveToPoint:_startPoint];
    }
    if (sender.state == UIGestureRecognizerStateChanged) {
        _movePoint = [sender locationInView:self];
        
        [_myBeizer addLineToPoint:_movePoint];
        _myShapeLayer.path = _myBeizer.CGPath;
    }
}

#pragma mark - Private Method | 私有方法


#pragma mark - 代理方法


@end

只需要在合理处调用,如:


- (void)clickMyButton:(UIButton *)sender
{
    simpleDrawingView * mySimpleDrawingView = [[simpleDrawingView alloc]initWithFrame:self.bounds];
    [mySimpleDrawingView setUpShapeLayerColor:[UIColor cyanColor] shapeLayerLineWidth:2];
    [self addSubview:mySimpleDrawingView];
}

相关文章

网友评论

      本文标题:iOS 简单的实时绘图功能

      本文链接:https://www.haomeiwen.com/subject/xsmscltx.html