Is there a line drawing SDK on iOS with touch?

Are there any frames that I can use to draw lines with a touch. Basically I want to add the ability to sign on an iPad / iPhone and capture it as an image.

Any help is greatly appreciated.

Thanks.

+6
source share
2 answers

You can fulfill your requirement using the kernel graphics available under UIKIT.

I had a similar requirement in my application with a different use, if necessary I can provide you with a code.

Tnq

.h file

#import <UIKit/UIKit.h> typedef enum _DrawingMode{ DrawingModePen =0, DrawingModeEraser=1, } DrawingMode; @interface DrawingView : UIView { CGPoint lastPoint; UIImageView *drawImage; BOOL mouseSwiped; int mouseMoved; DrawingMode mode; UIColor *_drawingPenColor; } @property (nonatomic, retain) UIColor *drawingPenColor; @property (nonatomic) DrawingMode mode; @property (nonatomic, retain) UIImageView *imageView; @property (nonatomic,retain)UIImageView *drawImage; @end 

.m

 #import "DrawingView.h" @implementation DrawingView @synthesize mode, drawingPenColor=_drawingPenColor, imageView=drawImage; -(void)initialize{ drawImage = [[UIImageView alloc] initWithImage:nil]; self.autoresizesSubviews = YES; drawImage.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); drawImage.frame = self.bounds; [self addSubview:drawImage]; self.backgroundColor = [UIColor clearColor]; mouseMoved = 0; _drawingPenColor = [[UIColor alloc] initWithWhite:0.0 alpha:1.0]; } -(void)maskImage:(UIImage *)image withMask:(UIImage *)maskImage { CGImageRef maskRef = maskImage.CGImage; CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), NULL, false); CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); UIImage *tempImage = [[UIImage alloc] initWithCGImage:masked]; //self.clippedImage = tempImage; [tempImage release]; CFRelease(masked); CFRelease(mask); } -(void)awakeFromNib{ [self initialize]; } - (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { // Initialization code [self initialize]; } return self; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { mouseSwiped = NO; UITouch *touch = [touches anyObject]; if ([touch tapCount] == 2) { drawImage.image = nil; return; } lastPoint = [touch locationInView:self]; //lastPoint.y -= 20; NSLog(@"touches begin"); } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { mouseSwiped = YES; UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:self]; //currentPoint.y -= 20; UIGraphicsBeginImageContext(self.bounds.size); [drawImage.image drawInRect:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); if (mode == DrawingModePen) { NSLog(@"drawing"); CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [_drawingPenColor CGColor]); } else { CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [[UIColor clearColor] CGColor]); CGContextBeginPath(UIGraphicsGetCurrentContext()); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextClearRect (UIGraphicsGetCurrentContext(), CGRectMake(lastPoint.x, lastPoint.y, 20, 20)); CGContextStrokePath(UIGraphicsGetCurrentContext()); NSLog(@"clearing"); } CGContextBeginPath(UIGraphicsGetCurrentContext()); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); CGContextStrokePath(UIGraphicsGetCurrentContext()); drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); lastPoint = currentPoint; mouseMoved++; if (mouseMoved == 10) { mouseMoved = 0; } } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; if ([touch tapCount] == 2) { drawImage.image = nil; return; } if(!mouseSwiped) { UIGraphicsBeginImageContext(self.bounds.size); [drawImage.image drawInRect:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); if (mode == DrawingModePen) { CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [_drawingPenColor CGColor]); } else { CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [self.backgroundColor CGColor]); } CGContextStrokePath(UIGraphicsGetCurrentContext()); CGContextFlush(UIGraphicsGetCurrentContext()); drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } } - (void)dealloc { [drawImage release]; [_drawingPenColor release]; [super dealloc]; } @end 
+10
source

Now there is a structure called BrushEngine, which you can find at http://www.cdframeworks.com/product/brushengine

BrushEngine allows you to draw with your fingers using lines, shapes (various built-in), custom images, and many others. Then you can save the result as an image or video.

0
source

Source: https://habr.com/ru/post/893251/


All Articles