美文网首页
手写板,签字版

手写板,签字版

作者: Young森 | 来源:发表于2015-10-23 11:37 被阅读115次

    1.建一个view

    .h文件复制以下代码

    /**

    *  画布

    */

    @interface SKGraphicView : 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;

    -(UIImage*)getDrawingImg;

    2 .m文件

    复制以下代码

    - (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];

    //创建保存功能

    UIButton *but = [UIButton buttonWithType:UIButtonTypeSystem];

    but.frame = CGRectMake(0, self.bounds.size.height-60, 100, 60);

    [but setTitle:@"保存至相册" forState:UIControlStateNormal];

    [but addTarget:self action:@selector(savePhoto) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:but];

    UIButton *undoBtn = [UIButton buttonWithType:UIButtonTypeSystem];

    undoBtn.frame = CGRectMake(110, self.bounds.size.height-60, 100, 60);

    [undoBtn setTitle:@"撤销" forState:UIControlStateNormal];

    [undoBtn addTarget:self action:@selector(undoBtnEvent) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:undoBtn];

    UIButton *clearBtn = [UIButton buttonWithType:UIButtonTypeSystem];

    clearBtn.frame = CGRectMake(220, self.bounds.size.height-60, 100, 60);

    [clearBtn setTitle:@"清除" forState:UIControlStateNormal];

    [clearBtn addTarget:self action:@selector(clearBtnEvent) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:clearBtn];

    }

    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];

    }

    #pragma mark --点击事件--

    - (void)savePhoto {

    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();

    UIImageWriteToSavedPhotosAlbum(image, self, nil, NULL);

    }

    else{

    UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"alert" message:@"请您先绘制图形" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];

    [alert show];

    }

    }

    -(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;

    }

    UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"alert" message:@"请您先绘制图形" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];

    [alert show];

    return nil;

    }

    -(void)undoBtnEvent

    {

    [_pathArray removeLastObject];

    [self setNeedsDisplay];

    }

    -(void)clearBtnEvent

    {

    [_pathArray removeAllObjects];

    [self setNeedsDisplay];

    }

    3在控制器中包含你建立的那个view

    调用以下代码就OK 了

    SKGraphicView *view = [[SKGraphicView alloc] initWithFrame:CGRectMake(0, 130, kwidth, [UIScreen mainScreen].bounds.size.height - 130)];

    view.backgroundColor = [UIColor whiteColor];

    view.color = [UIColor blackColor];

    view.lineWidth = 10;

    [self.view addSubview:view];

    4. 大功告成

    相关文章

      网友评论

          本文标题:手写板,签字版

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