自制画板

效果



重点代码

@implementation GSDrawFunView
{
    NSMutableArray * mShapeLayerArray; // 总layer数组,里面有好多线,每条线由下面数组组成
    NSMutableArray * mCurrentShapeLayerArray; // 当前画的线的layer数组
    NSMutableArray * mBezierPathArray; // 所有path数组
    UIColor * mCurrentColor;
    UIView * mDrawBoardView;
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [touches anyObject];
    CGPoint point = [touch locationInView:self];
    //控制画板位置,防止线画出画板
    if (point.x < mDrawBoardView.x  || point.y < mDrawBoardView.y || point.x > CGRectGetMaxX(mDrawBoardView.frame) || point.y > CGRectGetMaxY(mDrawBoardView.frame))
    {
        return;
    }
    
    //每条线开始画都要初始化path
    UIBezierPath *  currentBezierPath = [[UIBezierPath alloc]init];
    [currentBezierPath moveToPoint:point];
    [mBezierPathArray addObject:currentBezierPath];
    
    //每条线开始画都要初始化layer数组
    mCurrentShapeLayerArray = [[NSMutableArray alloc]init];
    
}
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [touches anyObject];
    CGPoint point = [touch locationInView:self];
    if (point.x < mDrawBoardView.x  || point.y < mDrawBoardView.y || point.x > CGRectGetMaxX(mDrawBoardView.frame) || point.y > CGRectGetMaxY(mDrawBoardView.frame))
    {
        return;
    }
    
    UIBezierPath * currentBezierPath = [mBezierPathArray lastObject];
    [currentBezierPath addLineToPoint:point];
    
    CAShapeLayer * currentLayer = [[CAShapeLayer alloc]init];
    currentLayer.path = currentBezierPath.CGPath;
    currentLayer.fillColor = nil;
    currentLayer.strokeColor = mCurrentColor.CGColor;
    currentLayer.lineJoin = kCALineJoinRound; //终点
    currentLayer.lineCap = kCALineCapRound; //拐角
    currentLayer.lineWidth = 2;
    [self.layer addSublayer:currentLayer];
    [mCurrentShapeLayerArray addObject:currentLayer];
    
    
}
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //每条线画完,都要添加到layer数组里
    [mShapeLayerArray addObject:mCurrentShapeLayerArray];
}

//改变画笔颜色
-(void)changeColorForPaintBrushWithColor:(UIColor *)color
{
    mCurrentColor = color;
    
}
//撤销
-(void)remokeLineAction
{
    //删除path
    UIBezierPath * lastBezierPath = [mBezierPathArray lastObject];
    [lastBezierPath removeAllPoints];
    [mBezierPathArray removeLastObject];
    
    //删除layer
    NSArray * lastShapeLayerArray = [mShapeLayerArray lastObject];
    [mShapeLayerArray removeLastObject];
    for (CAShapeLayer * layer in lastShapeLayerArray) {
        [layer removeFromSuperlayer];
    }
    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值