- (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内部的Image,但是它一直在给我内存警告代码有什么问题?
我在包含图像的imageview上添加了一个imageview,然后在用户点击完成后,我通过在给定的imageview中绘制可绘制的imageview图像来构建图像。
答案 0 :(得分:0)
我第一次阅读您的问题时,我知道您的代码中存在泄漏,因为它使用了图形 - 不确定这一点。我只有7个月的iOS经验。问题应该在你的drawableView.image中。您正试图获取 UIGraphicsGetImageFromCurrentImageContext()。
尝试将代码包装在autoreleasepool中。
@autoreleasepool {
// Wrap your code here...
}
最后,请确保您在主线程中运行代码。
dispatch_async(dispatch_get_main_queue(), ^{
// dispatch in main!
});