Draw a line by touch On UIImageView in iPhone

D

Its much useful for drawing something on screen by touch.

1) Declare 4 objects in .h file

CGPoint lastPoint;

BOOL mouseSwiped;

int mouseMoved;

UIImageView *signImage;
2) First create a UIImageView object ie. a blank image in viewDidLoad

signImage = [[UIImageView alloc ] initWithFrame:CGRectMake(15, 60, 290, 320)];

signImage.image = nil;

signImage.tag = 1000;

signImage.layer.borderWidth = 3.0;

signImage.layer.borderColor = [[UIColor lightGrayColor] CGColor];

[self.view addSubview:signImage];

 

2) Then add 3 methods TouchesBegin, TouchesMoved & TouchesEnd

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

{

mouseSwiped = NO;

UITouch *touch = [touches anyObject];

CGPoint touchLocation = [touch locationInView:self.view];

 

if (CGRectContainsPoint(signImage.frame, touchLocation))

{

lastPoint = [touch locationInView:signImage];

}

 

NSLog(@”Last :%.2f – %.2f”,lastPoint.x, lastPoint.y);

}

 

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

mouseSwiped = YES;

CGPoint currentPoint;

UITouch *touch = [touches anyObject];

CGPoint touchLocation = [touch locationInView:self.view];

 

if (CGRectContainsPoint(signImage.frame, touchLocation))

{

currentPoint = [touch locationInView:signImage];

UIGraphicsBeginImageContext(signImage.frame.size);

[first_signImage.image drawInRect:CGRectMake(0, 0, signImage.frame.size.width, signImage.frame.size.height)];

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);

CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);

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

signImage.image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

}

 

//currentPoint.y -= 150;

 

lastPoint = currentPoint;

 

mouseMoved++;

 

if (mouseMoved == 10) {

mouseMoved = 0;

}

 

}

 

– (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

if(!mouseSwiped) {

 

CGPoint currentPoint;

UITouch *touch = [touches anyObject];

CGPoint touchLocation = [touch locationInView:self.view];

 

if (CGRectContainsPoint(signImage.frame, touchLocation))

{

currentPoint = [touch locationInView:signImage];

 

UIGraphicsBeginImageContext(signImage.frame.size);

[signImage.image drawInRect:CGRectMake(0, 0, signImage.frame.size.width, signImage.frame.size.height)];

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);

CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);

CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);

CGContextBeginPath(UIGraphicsGetCurrentContext());

CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);

CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);

CGContextStrokePath(UIGraphicsGetCurrentContext());

signImage.image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

}

}

}

 

 

About the author

surjit.joshi
By surjit.joshi

Category