Я рисую линии по методу touchesMoved:
, и обычно он работает нормально. Но когда я увеличиваю изображение и рисую, ранее нарисованные линии смещаются и становятся все более и более размытыми, в конечном итоге исчезая. Я попытался использовать UIPinchGestureRecognizer
и просто увеличить frame
из myImageView
(только для событий с несколькими касаниями), но проблема возникает в обоих направлениях. Вот код для рисования:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSArray *allTouches = [touches allObjects];
int count = [allTouches count];
if(count==1){//single touch case for drawing line
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:myImageView];
UIGraphicsBeginImageContext(myImageView.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, myImageView.frame.size.width, myImageView.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastPoint = currentPoint;
}
else{//multi touch case
// handle pinch/zoom
}
}
Вот изображение, нарисованное без увеличения:
И это изображение, изображающее проблему после увеличения с красной стрелкой, показывающей сегмент, который уже был нарисован до увеличения (как показано на предыдущем изображении). Изображение размыто и смещено:
Также можно заметить, что часть линии, проведенной к концу, не затронута, и явление возникает для линий, оттянутых назад во времени. Я считаю, что причина этого в том, что атрибуты размера изображения теряются при увеличении / уменьшении, что, вероятно, вызывает размытие и сдвиг, но я не уверен в этом!
РЕДАКТИРОВАТЬ - Я загрузил короткое видео , чтобы показать, что происходит. Это что-то интересное ...
РЕДАКТИРОВАТЬ 2- Вот пример приложения для одного просмотра , фокусирующийся на проблеме.