CoreTextにはフォントのSmallCapsバリアントを選択する機能がありますか、フォントにその機能がない場合は小さなキャップを合成する機能はありますか?フォントのバリエーションや機能を扱う機能はありますが、小さな帽子について語っているCoreTextのドキュメントでは何も見つかりません。誰もこれに似た何かをしましたか?CoreTextはSmall Capsをサポートしていますか?
答えて
一般にCTFontDescriptorCreateCopyWithFeature
を使用するのが最も簡単です。あなた自身の答えで言及したように、これはあなたが要求している機能を実際に実装しているフォントに対してのみ機能します。
答えは「はい」と答えています。 Small Caps機能を備えたフォントをサポートしていますが、Small Capsをその機能を持たないフォントで合成することはサポートしていません。この機能を有効にするには、kCTFontFeatureSettingsAttribute
属性を持つCTFontDescriptor
属性を作成します。この属性は機能ディクテーションの配列に対応します。レターケースの場合はkCTFontFeatureTypeIdentifierKey
キーを3に設定し、スモールキャップの場合はkCTFontFeatureSelectorIdentifierKey
を3に設定する必要があります。 <ATS/SFNTLayoutTypes.h>
にはさまざまな値を識別する定数が含まれていますが、このヘッダーはiOS SDKでは使用できません。
、以下のサポートスモールキャップス:
- HoeflerText-正規
- HoeflerText-斜体
- HoeflerText-ブラック
- HoeflerText-BlackItalic
- ディド
注:Italic/Bold foディド族のntsは小さな帽子をサポートしていません。
私はこのヘッダは、今で利用可能だと思いますiOS 5 SDK –
ケビン・バラードの答えを広げる。値 '3'と '3'はシステムフォントで動作しますが、普遍的ではないようです。私は外部フォントを使用しており、これらの値は機能しませんでした。
UIFont *font = [UIFont fontWithName: fontName size: fontSize];
CFArrayRef fontProperties = CTFontCopyFeatures ((__bridge CTFontRef) font) ;
NSLog(@"properties = %@", fontProperties);
CFRelease(fontProperties);
を、あなたは小さなキャップまたは他のフォント機能を有効にする必要がありますどのようなフォント機能とセレクタ決定:
あなたはこのようなものを利用できるすべてのプロパティをログアウトすることができます。
ここでは情報が不完全であるため、この問題を解決しようとする人には、より完全なソリューションを提供するため、ここで回答することにしました。
私は今、アンソニーMattox氏が指摘したように、3,3として記載されていますが、実際に注意しなければならないシステムフォント値は(もiOSの6
のサポートを落としていますので、このソリューションは、iOSの7 UIFontDescriptor
を使用していますkLetterCaseType
とkSmallCapsSelector
の場合、番号で列挙型を参照しないでください)、カスタムフォントでは機能しません。私はこれがすべてのカスタムフォントの場合であろうと、いくつかのフォントであるかどうかはわかりませんが、私はこれが私の場合であることがわかりました。
これらの列挙型の両方の宣言に目を通すと、実際には廃止予定であることがわかります。おそらく小文字をサポートする少数のシステムフォントに対してのみ機能します。 Anthonyが概説したカスタムフォントの使用可能な属性を記録した後、カスタムフォントに使用する2つの正しい属性が見つかりました。それらはkLowerCaseType
とkLowerCaseSmallCapsSelector
です。私は、この組み合わせが他の唯一の選択肢だと考えていますので、あなたが使用しようとしているフォントであれば、どちらか一方のフォントになります。
私は両方のケースのために、この機能をカプセル化するために、いくつかのカテゴリのメソッドを書いた:
- (UIFont *) smallCapSystemFont
{
UIFontDescriptor *descriptor = [self fontDescriptor];
NSArray *array = @[@{UIFontFeatureTypeIdentifierKey : @(kLetterCaseType),
UIFontFeatureSelectorIdentifierKey : @(kSmallCapsSelector)}];
descriptor = [descriptor fontDescriptorByAddingAttributes:@{UIFontDescriptorFeatureSettingsAttribute : array}];
return [UIFont fontWithDescriptor:descriptor size:0];
}
- (UIFont *) smallCapCustomFont
{
UIFontDescriptor *descriptor = [self fontDescriptor];
NSArray *array = @[@{UIFontFeatureTypeIdentifierKey : @(kLowerCaseType),
UIFontFeatureSelectorIdentifierKey : @(kLowerCaseSmallCapsSelector)}];
descriptor = [descriptor fontDescriptorByAddingAttributes:@{UIFontDescriptorFeatureSettingsAttribute : array}];
return [UIFont fontWithDescriptor:descriptor size:0];
}
あなたが正しい名前とサイズのフォントを作成し、返します。それにはこれらの方法のいずれかを呼び出すことによって、これらを使用しますそのフォントの小さなキャップバージョン。あなたは、あなたが使うことを決めた小さな大文字フォントに使う正しい方法を見つけ出す必要があります。
実行時に(フォントプロパティ配列の結果を分析するだけでも)使用可能な型をチェックすることによって、プログラムで使用する方法を見つけ出す巧妙な方法がありますが、私はそうしていますいくつかの異なるフォントとマニュアルチェックしか使用していません。
編集:
私が気づいたことの一つは、数字が別々に処理されることです。数字を小さくしたい場合(実際にはそれをサポートするほとんどのフォントでは "旧式の数字"と呼ばれるようです)、明示的に属性として必要となります。
文字とは異なり、システムフォントとカスタムフォントの両方で同じように見えます。
あなただけの上記アレイのそれぞれにこの辞書を追加します。これは、それ自体が実際にこの属性をサポートする必要があるフォントを動作させるために、もう一度
@{UIFontFeatureTypeIdentifierKey : @(kNumberCaseType),
UIFontFeatureSelectorIdentifierKey : @(kLowerCaseNumbersSelector)}
。
この方法は、iOS 7システムフォント(Helvetica Neue)では機能しません。 – Legoless
@Legoless Helvetica Neueではフォントが小文字モードになっていないので、明確にするため、Helvetica Neueでは機能しません。これは、それが焼き付けられたフォントに対してのみ機能します。この質問の別の答えには、これらのフォントのリストがあります。これが動作するシステムフォントの例は "Didot"です。それを使って 'smallCapsSystemFont'を試してみてください。そうすれば実際に見られます。 – Dima
Helvetica Neueで小文字を使用する場合は、他の誰かが作成したフォントのバージョンを見つけるか、サイズの小さい大文字を描画して偽装する必要があります。 – Dima
ここに誰がスウィフト4サンプルを提供していないとして、私はUILabelでいくつかの小さなキャップのテキストを表示するための遊び場コードを含めるつもりです:
//: Playground - noun: a place where people can play
import UIKit
import CoreGraphics
let pointSize : CGFloat = 24
let fontDescriptor = UIFont(name: "HoeflerText-Regular", size: pointSize)!.fontDescriptor
let fractionFontDesc = fontDescriptor.addingAttributes(
[
UIFontDescriptor.AttributeName.featureSettings: [
[
UIFontDescriptor.FeatureKey.featureIdentifier: kLetterCaseType,
UIFontDescriptor.FeatureKey.typeIdentifier: kSmallCapsSelector
]
]
])
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 500, height: 100))
label.font = UIFont(descriptor: fractionFontDesc, size:pointSize)
label.text = "Montpelier, Vermont"
- 1. small capsの使い方は?
- 2. は私がCoreTextを試していますUIScrollViewの
- 3. CoreTextを使用してNSAttributedStringを表示します。
- 4. CSS3アニメーションはサポートしていますか?
- 5. Windows Azure同一のExtra SmallインスタンスまたはSmallインスタンスで複数のWebSiteを実行できますか
- 6. C intellisenseはサポートしていますが、C++をサポートしていない適切なIDEはありますか?
- 7. CUDAをサポートするGPUもOpenCLをサポートしていますか?
- 8. precommithooksをサポートしていますか?
- 9. DBCP - マルチスレッドをサポートしていますか?
- 10. AUFBVをサポートしていますか?
- 11. DELETE CASCADEをサポートしていますか?
- 12. Xpathをサポートしていますか?
- 13. BLToolKit:IQueryableをサポートしていますか?
- 14. Opera 10はhtml5オーディオタグをサポートしていますが、Opera 11はサポートしていますか?
- 15. CoreText - スペースは折り返しませんか?
- 16. GCCはコマンドファイルをサポートしています
- 17. libspotifyはoauthをサポートしています
- 18. IEはJQueryをサポートしています
- 19. stimulsoftreports.netはスタイルタグをサポートしています
- 20. ActionScriptはJavaScriptライブラリを使用してサポートしていますか?
- 21. djangoはテンプレートを分割してサポートしていますか?
- 22. jGitは次のいずれかをサポートしていますか?
- 23. なぜOpenGLはミップマップをサポートしていますが、インテグラルイメージはサポートしていませんか?
- 24. アンドロイドはSVGまたはTiny SVGをサポートしていますか?
- 25. AndroidはJDK 6または7をサポートしていますか
- 26. Damn Small Linuxコマンド
- 27. CTFramesetterCreateWithAttributedStringからのCoreTextメモリリーク
- 28. Ckeditor in Small IFrame
- 29. テキストのALL CAPS "phrase"をキャプチャしてください
- 30. CoreTextでタブストップを設定するには
私の場合は、オプションでitalics/boldもオプションでサポートする必要があるので、より一般的な属性バージョンを使用する必要があります。しかし、小文字のオン/オフを単純に切り替えるためには、 'CTFontDescriptorCreateCopyWithFeature'が少し使いやすくなります。 –