Quartz
でテキストをNSView
にCGContextShowTextAtPoint()
で描画しようとしています。これは、(BOOL)isFlipped
を私のNSView
サブクラスに返すようにYES
をオーバーライドするまでうまくいき、描画の左上に原点を配置しました。テキストは予想される領域に描画されますが、文字はすべて反転されます。私はまた、(理論的には、少なくとも)CGContextを反転させ、文脈の高さで翻訳することを試みました。CGContextShowTextAtPointは逆さまにレンダリングする
e.x。
// drawRect:
CGContextScaleCTM(theContext, 1, -1);
CGContextTranslateCTM(theContext, 0, -dirtyRect.size.height);
これは、同じ結果をもたらす。
同様の問題に対する多くの提案は、テキストマトリックスの変更を指摘しています。私はテキストマトリックスを単位行列に設定し、追加の逆行列を実行して、両方を実行しました。これらのすべての解決策は、テキストの奇妙なレンダリングにつながります(たぶんフラグメントが現れます)。
私が見たもう一つの提案は、この機能を他の方法で描画することでした(例:NSString
's描画方法。)しかし、これは主にC++/Cの間で行われており、可能であればこれらのレベルにとどまりたいと思います。
ご意見は大変ありがとうございます。必要に応じてさらにコードを投稿していただきたいと思います。
CGContextTranslateCTM(theContext, 0, -NSHeight(self.bounds));
CGContextScaleCTM(theContext, 1, -1);
ご注文ありがとうございます。あなたのコードを直接使用すると、描画がオフスクリーンでレンダリングされ、NSHeight(...)へのNSHeight(...)の変更によって原点が正しく変更されましたが、テキストの問題は残りました。 – Sam