2011-07-21 8 views
6

タッチで線を引くために使用できるフレームワークはありますか?基本的には、顧客がiPad/iPhoneにサインインして画像としてキャプチャする機能を追加したいと考えています。iOS上にタッチで線を描くSDKはありますか?

ご迷惑をおかけして申し訳ございません。

ありがとうございました。

+0

可能な複製http://stackoverflow.com/questions/679983/how-to-draw-signature-with-lines-on-iphone-screen – visakh7

答えて

10

あなたはUIKITフレームワークで利用可能なコアグラフィックスを使用して要件を満たすことができます。

私は別の用途で私のアプリケーションで同様の要件を持っていました。必要であれば私はあなたにコードを提供することができます。

TNQ

.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

コードを提供できますか? – Dev

+0

私はあなたがどれくらい遠くに助けてくれるのか知りませんが、人が遅いペースで線を引いて、私のコード上でもう少し余裕を持って行えば、あなたの場合try.inできます。 – Dinakar

+1

素晴らしい...これは本当に役立ちます...それ以上のことをするでしょう...ありがとうございます。 – Dev

0

あなたはhttp://www.cdframeworks.com/product/brushengine

BrushEngineで見つけることができますBrushEngineと呼ばれるフレームワークが用意されましたが、あなたがして描くことができます線、シェイプ(さまざまなビルトイン)、カスタムピクチャ、および他の多くの。その後、出力を画像またはビデオとして保存することができます。

関連する問題