美文网首页收藏ios
iOS画板(签字版)

iOS画板(签字版)

作者: OrrHsiao | 来源:发表于2018-10-29 11:19 被阅读0次

话不多说,直接上代码

.h文件

#import <UIKit/UIKit.h>

@interface XASignatureView : UIView

/**
 *  画布
 */
{
    CGPoint _start;
    CGPoint _move;
    CGMutablePathRef _path;
    NSMutableArray *_pathArray;
    CGFloat _lineWidth;
    UIColor *_color;
}

@property (nonatomic,assign)CGFloat lineWidth;/**< 线宽 */

@property (nonatomic,strong)UIColor *color;/**< 线的颜色 */

@property (nonatomic,strong)NSMutableArray *pathArray;

/**
 获取绘制的图片

 @return 绘制的图片
 */
-(UIImage*)getDrawingImg;

/**
 撤销
 */
-(void)undo;

/**
 清空
 */
-(void)clear;

@end

.m文件

#import "XASignatureView.h"

@implementation XASignatureView

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        _move = CGPointMake(0, 0);
        _start = CGPointMake(0, 0);
        _lineWidth = 2;
        _color = [UIColor redColor];
        _pathArray = [NSMutableArray array];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    // 获取图形上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    [self drawPicture:context]; //画图
}

- (void)drawPicture:(CGContextRef)context {
    for (NSArray * attribute in _pathArray) {
        //将路径添加到上下文中
        CGPathRef pathRef = (__bridge CGPathRef)(attribute[0]);
        CGContextAddPath(context, pathRef);
        //设置上下文属性
        [attribute[1] setStroke];
        CGContextSetLineWidth(context, [attribute[2] floatValue]);
        //绘制线条
        CGContextDrawPath(context, kCGPathStroke);
    }
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    //创建路径
    _path = CGPathCreateMutable();
    NSArray *attributeArry = @[(__bridge id)(_path),_color,[NSNumber numberWithFloat:_lineWidth]];
    //路径及属性数组数组
    [_pathArray addObject:attributeArry];
    //起始点
    _start = [touch locationInView:self];
    CGPathMoveToPoint(_path, NULL,_start.x, _start.y);
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    //释放路径
    CGPathRelease(_path);
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    _move = [touch locationInView:self];
    //将点添加到路径上
    CGPathAddLineToPoint(_path, NULL, _move.x, _move.y);
    [self setNeedsDisplay];
}

/**
 获取签名图片

 @return image
 */
-(UIImage *)getDrawingImg{
    
    if (_pathArray.count) {
        UIGraphicsBeginImageContext(self.frame.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        UIRectClip(CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
        [self.layer renderInContext:context];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        return image;
    }
    return nil;
}

/**
 撤销
 */
-(void)undo
{
    [_pathArray removeLastObject];
    [self setNeedsDisplay];
}

/**
 清空
 */
-(void)clear
{
    [_pathArray removeAllObjects];
    [self setNeedsDisplay];
}

@end

直接引用调用即可

XASignatureView *signatureView = [[XASignatureView alloc] init];
[self.view addSubview:signatureView];
signatureView.frame = CGRectMake(0, 100, 200, 200);
image.png

撤销功能、清除功能、获取生成的image功能都已暴露接口,直接调用即可

相关文章

  • iOS画板(签字版)

    话不多说,直接上代码 .h文件 .m文件 直接引用调用即可 撤销功能、清除功能、获取生成的image功能都已暴露接...

  • iOS笔刷效果

    iOS笔刷效果,iOS签字笔效果这波很强势,(Swift版)Demo地址

  • ios开发实现画板功能

    ios开发实现画板功能 ios开发实现画板功能

  • canvas 签字画板 移动端及pc端

    利用canvas,在移动端和pc端生成签字画板,签字并保存base64图片传给后端 html代码块

  • iOS 贝塞尔曲线 画线 锯齿问题解决

    最近在做一个签字版的模块,需要用到了贝塞尔曲线来画。其实,做这种画板有很多方法,可以用UIGraphics来画,也...

  • iOS 画板--UIBezierPath和CAShapeLaye

    iOS 画板--UIBezierPath和CAShapeLayer实现 最近在做的项目中,用到画板的功能,现在项目...

  • iOS如何实现一个简单的画板

    写在前面 最近公司要做一个画板类App,所以研究了一下iOS画板的实现。通过查阅资料,我发现大家做画板很多是使用U...

  • 如何在iPad上使用虚拟白板(屏幕分享)

    概念画板iOS版本教程 将iPad和iPhone连接到视频会议软件,使用概念画板实时作画。 远程工作模式现在越来越...

  • 签字版;袁大头

    袁大头是民国时期主要流通货币之一,“袁大头”是对袁世凯像系列硬币的口语俗称,严谨点说叫“袁世凯像背嘉禾银币”。北洋...

  • 袁大头签字版

    袁大头是民国时期主要流通货币之一,“袁大头”是对袁世凯像系列硬币的口语俗称。"袁大头"在货币收藏界被称为银元之宝,...

网友评论

    本文标题:iOS画板(签字版)

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