2016-04-14 3 views
0
- (void)drawingViewDidPan:(UIPanGestureRecognizer*)sender 
{ 
    CGPoint currentDraggingPosition = [sender locationInView:drawableView]; 

    if(sender.state == UIGestureRecognizerStateBegan){ 
    _prevDraggingPosition = currentDraggingPosition; 
    } 

    if(sender.state != UIGestureRecognizerStateEnded){ 
     [self drawLine:_prevDraggingPosition to:currentDraggingPosition]; 
    } 
    _prevDraggingPosition = currentDraggingPosition; 
} 

-(void)drawLine:(CGPoint)from to:(CGPoint)to 
{ 
    CGSize size = drawableView.frame.size; 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    [drawableView.image drawAtPoint:CGPointZero]; 

    CGFloat strokeWidth = 4.0; 
    UIColor *strokeColor = [UIColor blackColor]; 

    CGContextSetLineWidth(context, strokeWidth); 
    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor); 
    CGContextSetLineCap(context, kCGLineCapRound); 


    CGContextMoveToPoint(context, from.x, from.y); 
    CGContextAddLineToPoint(context, to.x, to.y); 
    CGContextStrokePath(context); 

    drawableView.image = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 
} 

Я использую вышеуказанный фрагмент кода, чтобы нарисовать изображение, находящееся внутри UIImageView, но он продолжает давать мне предупреждение о том, что не так с кодом?Рисунок на UIImage дает предупреждения памяти

Я добавил изображение на мое изображение, которое содержит изображение, а затем после того, как пользователь нажимает на done. Я создаю изображение, рисуя мое изображение с обратным изображением в данном изображении.

ответ

0

В первый раз, когда я прочитал ваш вопрос, я знал, что в вашем коде есть утечка, так как он использует Graphics - не уверен в этом. У меня только 7 месяцев опыта работы в iOS. Проблема должна быть в вашем drawableView.image. Вы пытаетесь получить UIGraphicsGetImageFromCurrentImageContext().

Попробуйте обернуть свой код в autoreleasepool.

@autoreleasepool { 
// Wrap your code here... 
} 

И, наконец, убедитесь, что вы используете свой код в основной теме.

dispatch_async(dispatch_get_main_queue(), ^{ 
    // dispatch in main! 
}); 
Смежные вопросы