2

Quartz2d についての私の理解は、コードCGContextTranslateCTM(context, x, y);が座標系を変換するということです。多くの形状を持つ Quartz2d ビューがあり、ユーザーはそれをパンしてズームできる必要があります。ただし、CGContextScaleCTM(context, scaleX, scaleY);コードを使用すると、ユーザーが見ている視点の中心ではなく、原点を中心にすべてがスケーリングされます。

これに対する私の解決策は、次のコードを使用することでした。

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 512.0+offset.x, 384.0+offset.y);  
//(512, 384) is the center of the iPad screen
CGContextScaleCTM(context, scale, scale);

あなたはうまく翻訳できますが、物事はまだ隅にスケーリングされます. どうしたの?

編集:ああ。わお。当たり前。原点を移動すると形状も移動するため、形状に対して相対的に移動することはできません。何が問題なのかはわかりましたが、どうすればよいでしょうか?(形状とは別に原点を移動します)

4

2 に答える 2

0

CoreGraphics C API の使用経験はあまりありませんが、ビューを UISCrollView に貼り付けることを検討したことはありますか? 機能があり、無料である場合、それを使用しないのはなぜですか?

于 2011-01-15T00:50:45.820 に答える
0

形状ごとに UIView クラスを作成できます。周りを移動する各形状の UIView オブジェクトをインスタンス化します。

次に、ビュー オブジェクトの中心を shape.center = CGPointMake(x,y); で変更します。おそらくメソッドはbounds.centerを呼び出し、UIViewを見てください。

これにより、自動的に drawRect() が呼び出され、問題ありません。

于 2012-11-30T22:47:14.170 に答える