1

これは、iPad アプリケーションのビューで Core Graphics を使用して (タッチ イベントに応答して) パスを描画することに関連する質問です。

スクロールビューの一部として、タッチのパスをトレースしたいビューがあります。以下のコードは、アプリ内の他の uiimageviews では機能しますが、この特定のサブビューでは機能しません。(画面をなぞったりタッチしたりして) 描画すると、線が表示されますが、y 方向に動き始めます。そのため、トレース全体が y 方向に圧縮され続けます!! 線が上に移動するにつれて、それらも拡散し、最終的には消えるように見えます!

スクロールビュー外の別のビューでも同じコードが正常に機能します。過去 3 日間オンラインで検索し、ここで何が起こっているのかを理解しようと何時間も費やしましたが、まだ手がかりがありません。ヘルプ/提案をいただければ幸いです。

ありがとう。

描画用の私のコードは次のとおりです。

UIGraphicsBeginImageContext(coverIVFragments.frame.size);
            [coverIVFragments.image drawInRect:CGRectMake(0, 0, coverIVFragments.frame.size.width, coverIVFragments.frame.size.height)];
            CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
            CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2.0);
            CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
            CGContextBeginPath(UIGraphicsGetCurrentContext());
            CGContextMoveToPoint(UIGraphicsGetCurrentContext(), x1, y1);
            CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), x2, y2);
            CGContextStrokePath(UIGraphicsGetCurrentContext());

            coverIVFragments.image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
4

1 に答える 1

1

最初に、UIGraphicsBeginImageContext の代わりにスケールを取る新しいメソッドを使用する必要があります (iPad では Xcode が便利ではありません)。

おそらく問題は、スクロール ビューとの相互作用です。ルーチン ログの一番上に、scrollviews contentOffset とフレームが記録されます。いつも 0,0 の原点を想定していますが、実際に必要なフレームは sv.contentOffset と sv.bounds.size の組み合わせである可能性があります。

私はよくこの種の問題をログに記録し、何をする必要があるかがすぐに明らかになります。

編集:問題は非整数の四角形を使用しています-この行はズームなしで問題を修正します:

   coverImageView.frame = CGRectIntegral(coverImageView.frame);
   UIGraphicsBeginImageContextWithOptions(coverImageView.frame.size, NO, imageScrollView.zoomScale);

「スケール」パラメーターを正しく使用しているとは思いません-おそらく、描画が入る長方形のサイズを変更し、意図した目的のためにスケールを使用して、そこに「0」を渡す必要があります。

于 2012-09-16T12:28:32.680 に答える