【问题标题】:CGContextClearRect not working smoothly in touchesMoved event in objective cCGContextClearRect 在目标 c 的 touchesMoved 事件中无法正常工作
【发布时间】:2016-05-09 06:06:57
【问题描述】:

我使用了这段代码,它可以部分工作,但图像不能正确裁剪 output seen like this

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

【问题讨论】:

    标签: objective-c image-processing cgcontext cgpoint


    【解决方案1】:

    我之前遇到了同样的问题,然后我尝试了下面的代码,它对我有用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多