Rysuję linie zgodnie z metodą touchesMoved:
i zazwyczaj działa dobrze. Ale kiedy przybliżam obraz i rysuję, poprzednio narysowane linie są zarówno przemieszczane, jak i coraz bardziej rozmyte, ostatecznie zanikające. Próbowałem używać UIPinchGestureRecognizer
i po prostu zwiększać liczbę z myImageView
(tylko dla zdarzeń wielodotykowych), ale problem występuje w obie strony. Oto kod do rysowania:CGContextStrokePath nie działa podczas powiększania i rysowania obrazów
- (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
}
}
Oto obraz wyciągnąć ponad bez powiększania:
I to jest obraz przedstawiający problem po powiększania-in z czerwoną strzałkę pokazuje segment który został już narysowany przed powiększeniem (jak pokazano na poprzednim obrazie). Obraz jest zamazany i przesunięty zarówno:
Można również zauważyć, że część linii poprowadzonej pod koniec jest nienaruszone i zjawisko występuje dla liniami w czasie. Wierzę, że powodem tego jest to, że atrybuty rozmiaru obrazu są tracone podczas powiększania/pomniejszania, co prawdopodobnie powoduje rozmycie i przesunięcie, ale nie jestem tego pewien!
EDYCJA - Przesłałem a short video, aby pokazać, co się dzieje. To zabawne ...
EDYCJA 2- Oto a sample single-view app koncentrujące się na problemie.
Myślę, że może to mieć coś wspólnego z contentMode widoku, który rysujesz. Spróbuj użyć UIViewContentModeRedraw? – kevboh
Próbowałem ustawić dla 'myImageView' i' drawImage' (oba są 'UIImageView's), ale to nie zadziałało :(... – tipycalFlow
@kevboh Przesłałem wideo (i dodano w odpowiedzi), które może daje lepsze wyobrażenie o problemie ... – tipycalFlow