0

ビューの 1 つで drawRect にボックス/パスを描画しようとしています。パス rect は次のとおりです。

CGRect pathRect = CGRectMake(self.buttonSize_ + 25, commentYOffset, rect.size.width - 80, 40);

そして、この前に私は持っています:

  CGContextSetTextMatrix(context, CGAffineTransformIdentity);
        CGContextTranslateCTM(context, 0.0,  rect.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);

このパスを上から 100 ピクセルで描画したかったので、commentYOffset を 100 に設定しましたが、これではうまくいきません。このパスを描画すると、上から 100 ピクセルで始まるように、何が間違っていますか?

4

1 に答える 1

0

CGContextTranslateCTM(context,…)翻訳変換をコンテキストに適用します。変換は、描画コンテキスト内の既存の変換の後に適用されます。投稿したコードの最後の 2 行は、描画コンテキストの垂直方向を効果的に反転させます。それらをそのままにしておくと、パスが必要な場所に描画されます。

編集: adit は、テキストの描画を正しい向きに保つために変換が必要だと言っているので、描画コンテキストで垂直方向を反転する必要がある場合 (あなたが行っているように)、これらの変換を適用した後、0-y がrect の下部と正の y 軸は rect の上部を指します。したがって、パスを上から 100 ピクセル描画するには、作成する必要があります

commentYOffset = CGRectGetMaxY(rect) - 40.0 - 100.0;

その 40 は、rect の高さが 40 ポイントであるためです。実際には、これらの名前付き定数を作成することをお勧めします。これにより、マジック ナンバーをあちこちにコピーする必要がなくなります。次に、コードは次のようになります。

commentYOffset = CGRectGetMaxY(rect) - kPathRectHeight - kPathTopMargin;
于 2013-03-19T08:14:53.313 に答える