私はすべてのプリミティブをNSBezierPath
インスタンスとして表しているので、(潜在的に巨大な)数のコンポーネントに対して効率的なヒットテストを実行する必要があります。これまでのすべての素晴らしい作業。 私はベジェパスに文字列を変換するために、AppleのSpeedometerView例からNSString (BezierConversions)
カテゴリを使用しています:NSString描画とNSBezierPath描画の文字列
は今、私は特に、ビュー内の自分の位置を反映して、NSString
オブジェクトを変換し、トラブルを抱えています。
文字列を作成したベジェパスは偉大に見えますが、それはビューでNSString
インスタンスの場所の位置と一致するように位置決めするので、かなりのない仕事をして、私はこの質問は本当にについて
NSBezierPath
とtransformUsingAffineTransform:
対であると仮定。- ビューに適用
NSAffineTransform
の組み合わせと私のテストプロジェクトでNSString drawAtPoint:
でも些細なケースが失敗しました:
グレーベジェ用いて描画された文字列の表現:
NSAffineTransform *moveFinal = [NSAffineTransform transform];
[moveFinal translateXBy:x yBy:y];
[textBezier transformUsingAffineTransform:moveFinal];
と
[testString drawAtPoint:NSMakePoint(x, y)
withAttributes:attributes];
同じ属性、同じ入力位置、ビュー内の異なる位置を介して紫ストリング。
これは回転したテキストでは悪化します。それが今NSString
BOで実験
NSString sizeWithAttributes:
NSBezierPath bounds
によって返さ異なるバウンディングボックスまで沸騰しているよう
UPDATE#1
が見えますundingRectWithSize
境界は、テキストのサイズと同じではありません。..行ってもいいです:オフセット
NSBezierPath
がbezierWithFontから返されました。たとえば、大きなローマ字のイタリック* f *は、 'NSAttributedString size'によって返されるボックスの境界をはるかに超えて描画します。 – hamstergene
それで、私は 'boundingRectWithSize'に切り替えました。さまざまなフォントの寸法についての良いイントロは、[ここ](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/FontHandling/Tasks/GettingFontMetrics)で見つけることができます。html)ここで、sizeWithAttributesは外側の境界ボックスを使用し、NSBezierPath boundsはグリフが占める実際の領域を使用します。 – Jay