touchesMoved:
メソッドに従って線を引いていますが、通常は正常に機能します。しかし、画像を拡大して描画すると、以前に描画された線がずれて、ますますぼやけていき、最終的には消えてしまいます。ofを使用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
}
}
ズームせずに描画した画像を次に示します。
これは拡大後の問題を示す画像で、赤い矢印は拡大前に既に描画されていたセグメントを示しています (前の画像を参照)。画像はぼやけており、ずれています。
また、最後に向かって描かれた線の一部は影響を受けておらず、時間を遡って描かれた線に対してこの現象が発生することもわかります。この理由は、ズームイン/ズームアウトすると画像サイズ属性が失われ、おそらくぼかしやシフトが発生するためだと思いますが、それについてはわかりません!
編集-何が起こっているかを示す短いビデオをアップロードしました。なんか面白そう…
EDIT 2-これは、問題に焦点を当てたシングルビューアプリのサンプルです。