6

前もって質問:

属性付き文字列の font-weight と font-style 情報に直接アクセスできますか? または、この情報を設定できる新しい文字列を作成できますか?

説明:

iOS 6 では、選択範囲を太字または斜体に切り替えることができます。しかし、これが機能する方法は厄介です。Apple が公開している NSFontAttributeName は変更されません (たとえば、フォント名が "HelveticaNeue" から "HelveticaNeue-Bold" に変更されます)。代わりに、font-family を「Helvetica Neue」として保持し、スタイル文字列で「font-weight」を太字に変更します。属性付きテキストのインスタンスにその説明を求める場合、フォント情報については次のように表示されます。

NSFont = "<UICFFont: 0x1fbc53a0> font-family: \"Helvetica Neue\"; font-weight: bold; font-style: normal; font-size: 16px";

これは問題を引き起こします。太字と斜体のスタイル情報を保持したままフォントを変更することはできません。スタイル情報のために古い属性付き文字列をスキャンし、新しいフォントで新しい文字列を作成し、フォント属性名を変更するというフープを飛び越える場合(たとえば、必要な場所に「Courier-Bold」を使用)太字)、新しい問題が発生します: フォントを通常の (太字ではない) に戻そうとすると、代わりに「Courier-Bold」のようなフォント名が表示されますスタイル情報がまだ太字に設定されていないため、「太字」のフォントの太さ。もちろん、トグルしてもフォント名は変わりません。したがって、基本的に、ユーザーが選択したテキストを切り替えたときに変更できないフォントを作成しました。ユーザーはコンテキスト メニューの「太字」ボタンを押しますが、太字がフォント名にハードコーディングされているため、何もしません。

別のルートに進み、UITextView で "toggleBoldface" と "toggleItalic" をオーバーライドしようとすると、スタイル文字列のスタイル情報が変更されるのを実際に防ぐことはできないようです。トグルイベント中にフォント名だけを変更することはできないようです。

繰り返しになりますが、問題は、font-weight と font-style の情報に何らかの形で直接アクセスできないかということです。または、この情報を設定できる新しい文字列を作成できますか? これにより、あるフォントから別のフォントに切り替えようとしてスタイル情報を保持するという問題が解決されます。

そして二重の説明:

私たちはiOSについて話している。ある範囲の文字に対して属性付き文字列のフォント属性 (NSFontAttributeName) を設定すると、iOS は内部的にスタイル文字列で NSFont を作成します。自分でフォント属性を設定した場合、スタイル文字列は「font-weight: normal; font-style: normal」となります。ただし、このスタイル文字列は、UITextView で設定された (トグルによって) 太字および斜体の情報が格納される場所です。

4

1 に答える 1

1

属性キーおよび/またはの値を設定CTFontRefした場所を使用して、新しいを作成できるようです。それは役に立ちますか?CTFontAttributesRefkCTFontWeightTraitkCTFontSymbolicTrait

参照。CTFontDescriptorReferenceおよびCTFontReference

編集

これはうまくいかないと思います-私はそれをもっと自分で調べました...他の誰かが同じ考えを持っている場合に備えて、これをここに残します.

于 2012-11-03T21:02:34.113 に答える