2016-05-09 31 views
5

Ho usato questo codice, funziona in parte, ma immagine non ritagliare correttamente output seen like thisCGContextClearRect non funziona correttamente in caso touchesMoved in c obiettivo

-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [touches anyObject]; 
CGPoint currentPoint = [touch locationInView:_img.superview]; 

UIGraphicsBeginImageContext(self.img.frame.size); 
[_img.image drawInRect:CGRectMake(0, 0, _img.frame.size.width, _img.frame.size.height)]; 

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 10); 
CGContextBeginPath(UIGraphicsGetCurrentContext()); 

CGContextClearRect (UIGraphicsGetCurrentContext(), CGRectMake(currentPoint.x, currentPoint.y, 15, 15)); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 
_img.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
} 

risposta

5

io faccia lo stesso problema in precedenza, allora ho provato sotto il codice ed è un lavoro per me

UITouch *touch = [touches anyObject]; 
CGPoint currentPoint = [touch locationInView:self.img_main]; 
// NSLog(@"Current ponint : %f,%f",currentPoint.x,currentPoint.y); 

self.img_main.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
self.img_main.contentMode = UIViewContentModeScaleAspectFit; 

UIGraphicsBeginImageContextWithOptions(self.img_main.bounds.size, NO, 0.0); 
[_img_main.image drawInRect:CGRectMake(0,0, self.img_main.bounds.size.width,self.img_main.bounds.size.height)]; 
CGContextBeginPath(UIGraphicsGetCurrentContext()); 
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 

//For clearing Size and Mode 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush_Size); 
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDestinationOut); 
//For Clearing Opacity   
CGContextSetAlpha(UIGraphicsGetCurrentContext(), brush_opacity); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 

_img_main.image = UIGraphicsGetImageFromCurrentImageContext(); 

CGContextFlush(UIGraphicsGetCurrentContext()); 
UIGraphicsEndImageContext(); 
+0

grazie viraj Padsala funziona per me !! –