2012-08-14 108 views
0

我是iPhone新手。我有一個任務,我需要用手指畫一張照片。沒有什麼奇特的,只有一種顏色的寬度(siganture)。任何人都可以指出實現這一目標的最佳方式嗎? TNX在照片上繪圖

+0

你能給我們一些你已經有的代碼樣本嗎?或者你想如何以更具體的方式做到這一點? – hifkanotiks 2012-08-14 13:18:05

回答

0

請參閱此鏈接....雖然這個問題被關閉的解決方案是正確的。 https://stackoverflow.com/questions/11828200/writing-with-finger-on-iphone/11828810#11828810

請參閱該代碼。我已經使用UITouch

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
mouseSwiped = NO; 
UITouch *touch = [[event touchesForView:baseView]anyObject]; 
lastPoint = [touch locationInView:drawingView]; 

} 

// Handles the continuation of a touch. 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
mouseSwiped = YES; 

UITouch *touch = [[event touchesForView:baseView] anyObject]; 
CGPoint currentPoint = [touch locationInView:drawingView]; 
//currentPoint.y -= 20; 

UIGraphicsBeginImageContext(drawingView.frame.size); 
[drawingView.image drawInRect:CGRectMake(0, 0, drawingView.frame.size.width, drawingView.frame.size.height)]; 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); 
if (eraserSelected) 
{ 
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 10.0); 
} 
[self changeBrushColor]; 
//[self changeBrushColor:segmentedControl]; 
//CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0); 
CGContextBeginPath(UIGraphicsGetCurrentContext()); 
CGContextMoveToPoint(UIGraphicsGetCurrentContext() , lastPoint.x, lastPoint.y); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
CGContextStrokePath(UIGraphicsGetCurrentContext()) ; 
drawingView.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

lastPoint = currentPoint; 
} 

// Handles the end of a touch event when the touch is a tap. 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
//UITouch *touch = [[event touchesForView:self.view] anyObject]; 
/* 
if ([touch tapCount] == 2) 
{ 
imgView.image = nil; 
return; 
} 
*/ 

if(!mouseSwiped) { 
    UIGraphicsBeginImageContext(drawingView.frame.size); 
    [drawingView.image drawInRect:CGRectMake(0, 0, drawingView.frame.size.width, drawingView.frame.size.height)]; 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); 
    [self changeBrushColor]; 
    //[self changeBrushColor:segmentedControl]; 
    //CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext() , lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()) ; 
    CGContextFlush(UIGraphicsGetCurrentContext()); 
    drawingView.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 
} 

- (void)changeBrushColor 
{ 
switch (selectedColor) { 
    case 1: 
     CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0); 
     break; 
    case 2: 
     CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.45, 0.87, 0.04,   1.0); 
     break; 
0

我創建了你想要的演示,下面是它的代碼。

CGPoint midPoint(CGPoint p1, CGPoint p2) 
{ 
    return CGPointMake((p1.x + p2.x) * 0.5, (p1.y + p2.y) * 0.5); 
} 


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    UITouch *touch = [touches anyObject]; 

    previousPoint1 = [touch previousLocationInView:self]; 
    previousPoint2 = [touch previousLocationInView:self]; 
    currentPoint = [touch locationInView:self]; 

    [self touchesMoved:touches withEvent:event]; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    UITouch *touch = [touches anyObject]; 

    previousPoint2 = previousPoint1; 
    previousPoint1 = [touch previousLocationInView:self]; 
    currentPoint = [touch locationInView:self]; 

    // calculate mid point 
    CGPoint mid1 = midPoint(previousPoint1, previousPoint2); 
    CGPoint mid2 = midPoint(currentPoint, previousPoint1); 

    CGMutablePathRef path = CGPathCreateMutable(); 
    CGPathMoveToPoint(path, NULL, mid1.x, mid1.y); 
    CGPathAddQuadCurveToPoint(path, NULL, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y); 
    CGRect bounds = CGPathGetBoundingBox(path); 
    CGPathRelease(path); 

    CGRect drawBox = bounds; 

    //Pad our values so the bounding box respects our line width 
    drawBox.origin.x  -= self.lineWidth * 2; 
    drawBox.origin.y  -= self.lineWidth * 2; 
    drawBox.size.width  += self.lineWidth * 4; 
    drawBox.size.height  += self.lineWidth * 4; 

    UIGraphicsBeginImageContext(drawBox.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    curImage = UIGraphicsGetImageFromCurrentImageContext(); 
    [curImage retain]; 
    UIGraphicsEndImageContext(); 

    [self setNeedsDisplayInRect:drawBox]; 

} 

- (void)drawRect:(CGRect)rect 
{ 

    [curImage drawAtPoint:CGPointMake(0, 0)]; 
    CGPoint mid1 = midPoint(previousPoint1, previousPoint2); 
    CGPoint mid2 = midPoint(currentPoint, previousPoint1); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    [self.layer renderInContext:context]; 

    CGContextMoveToPoint(context, mid1.x, mid1.y); 
    CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y); 
    CGContextSetLineCap(context, kCGLineCapRound); 
    CGContextSetLineWidth(context, self.lineWidth); 
    CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor); 

    CGContextStrokePath(context); 

    [super drawRect:rect]; 

    [curImage release]; 

} 

You also Download the source code for Here.

我認爲這幫助了這麼多。

快樂編碼。