Sorry for late reply , i solved it. Here is the code from my App:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
endPoint = [touch locationInView:self];
if(isAnyShapeSelected) // shape is selected and getting moved
{
[self deselectShape];// deselect the selected shape
// then create a new bezier path object with a new location (transformed bezierpath object)
CGPathRef _path = currentSelectedPath.CGPath;// currentSelectedPath is a path which we have selected in touches begin (or while moving)
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, endPoint.x-startPoint.x, endPoint.y-startPoint.y);
_path = (CGPathCreateMutableCopyByTransformingPath(_path, &transform));
currentSelectedPath.CGPath = _path;
// UIBezierPath *uiPath = [UIBezierPath bezierPathWithCGPath:_path];
// uiPath.lineWidth = currentSelectedPath.lineWidth;
startPoint = endPoint;
[self selectShape:currentSelectedPath];// select the shape again
[dict_path removeAllObjects];//remove all object from current drawing dictionary
// NSLog(@"pathArray: %@", pathArray);
// Add values to dictionary
if([[pathArray objectAtIndex:selectedShapeIndex] objectForKey:@"shape"])// if key 'shape' exist for the selected shape, if filled arrow is selected
[dict_path setValue:@"arrow" forKey:@"shape"]; // then there must be no affect on it while moving it
[dict_path setValue:currentSelectedPath forKey:@"path"];
[dict_path setValue:[[pathArray objectAtIndex:selectedShapeIndex] objectForKey:@"color"] forKey:@"color"];
[pathArray removeObjectAtIndex:selectedShapeIndex];// REMOVING object frm pathArray
NSDictionary *tempDict = [NSDictionary dictionaryWithDictionary:dict_path];
[pathArray insertObject:tempDict atIndex:selectedShapeIndex];// addding selected shape at every pixel movement
[dict_path removeAllObjects];
CGPathRelease(_path);
[self setNeedsDisplay];
}
}
// here is my draw rect method
- (void)drawRect:(CGRect)rect
{
for(NSDictionary *_pathDict in pathArray)
{
if([_pathDict objectForKey:@"shape"])// if shape is arrow then fill it(shape key is taken for arrow)
{
[((UIColor *)[_pathDict valueForKey:@"color"]) setFill]; // this method will choose the color from the receiver color object (in this case this object is :strokeColor)
[[_pathDict valueForKey:@"path"] fill];
}
[((UIColor *)[_pathDict valueForKey:@"color"]) setStroke]; // this method will choose the color from the receiver color object (in this case this object is :strokeColor)
[[_pathDict valueForKey:@"path"] strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}
if([dict_path objectForKey:@"shape"])
{
[[dict_path objectForKey:@"color"] setFill]; // this method will choose the color from the receiver color object (in this case this object is :strokeColor)
[[dict_path objectForKey:@"path"] fill];
}
[[dict_path objectForKey:@"color"] setStroke]; // this method will choose the color from the receiver color object (in this case this object is :strokeColor)
[[dict_path objectForKey:@"path"] strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}
-(void)deselectShape // deselect shape
{
[centerline removeFromSuperlayer];
isAnyShapeSelected = NO;
[btnResize removeFromSuperview];
// show hide delete button
[self.delegate showDeleteButton:isAnyShapeSelected];//delegate to active and inactive delete button
}
For how to select a shape on touchesBegin see my anwer at How do I detect a touch on a UIBezierPath and move a ball along that?