2011-07-21 20 views
6

¿Existe un marco que pueda usar para dibujar líneas con el tacto? Básicamente, quiero agregar la capacidad de un cliente para iniciar sesión en iPad/iPhone y capturarlo como una imagen.¿Hay un SDK para dibujar líneas en iOS con toque?

Cualquier ayuda muy apreciada.

Gracias.

+0

posible duplicado de http://stackoverflow.com/questions/679983/how-to-draw-signature-with-lines-on-iphone-screen – visakh7

Respuesta

10

puede satisfacer sus necesidades utilizando gráficos básicos disponibles en el marco UIKIT.

tenía un requisito similar en mi aplicación con un uso diferente, si es necesario le puedo proporcionar el código.

TNQ

archivo .h

#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 
+0

cool ... ¿me puede dar el código? – Dev

+0

No sé hasta dónde te puede ayudar, pero puedes intentarlo. En tu caso, si una persona dibuja la línea a un ritmo lento y se puede usar un poco más de espacio en mi código. – Dinakar

+1

increíble ... esto realmente ayuda ... jugará más con él ... muchas gracias. – Dev

0

En la actualidad existe un marco llamado BrushEngine que se pueden encontrar en http://www.cdframeworks.com/product/brushengine

BrushEngine permite dibujar con sus dedos usando líneas, formas (varias incorporaciones), imágenes personalizadas y muchos otros Luego puede guardar la salida como una imagen o un video.

Cuestiones relacionadas