11

iOSでは、ファイル名(.otfファイル)をinfo.plistファイルに追加し、次のコード行を使用して、プロジェクトにカスタムフォントをロードします。

UIFont myFont * = [UIFont fontWithName:titleFontName size:titleFontSize];

UILabelsとUITextViewsで使用できるフォントを入手しました。

このフォントがスモールキャップスでのみ表示されるようにするにはどうすればよいですか?Photoshopで使用すると、スモールキャップススイッチをオンにして、すべての単語をスモールキャップスに植字することができます(したがって、フォントに欠けているものはないと結論付けます)。iOSで同様の効果を得るにはどうすればよいですか?

文字列を大文字に変換することは、他の理由で実行可能なオプションではありません。

詳細情報:フォントのファミリーにはメンバーが1つしかありません。次のコードを使用して理解できるように、ファミリーにはスタンドアロンのスモールキャップスメンバーはありません。

 for (NSString * familyName in [UIFont familyNames]) {

        NSLog(@"---------------- %@ ---------------", familyName);
        for (NSString * fontName in[UIFont fontNamesForFamilyName:familyName] )
           NSLog(@"- %@", fontName);
   }
4

2 に答える 2

18

オープンタイプ機能を使用して、フォントでスモールキャップスを有効にします。iOS 7では、フォント記述子を使用してOpen Type機能にアクセスし、スモールキャップスを有効にすることができます。

この質問では、コアテキストを使用してスモールキャップスをオンにする方法について説明しますが、UIFontsビューとUIKitビューでも同じように簡単に行うことができます。有効にする機能の辞書の配列を作成し、UIFontDescriptorに設定する必要があります。UIFontDescriptorFeatureSettingsAttribute

各フォント機能ディクショナリには、機能タイプを指定するためのキーと値、および機能セレクター用のキーと値が含まれています。使用しているフォントに応じて、スモールキャップスに対応する正しい値を見つける必要があります。これらは、コメント付きセクションがログに記録する配列で見つけることができます。

UIFontカテゴリ

このカテゴリは、スモールキャップスが有効になっているUIFontオブジェクトを生成します。正しいフォント名を追加する必要があります。

#import "UIFont+SmallCaps.h"
#import <CoreText/CoreText.h>

@implementation UIFont (SmallCaps)

+ (UIFont *) applicationSmallCapsFontWithSize:(CGFloat) size {
    /*
    // Use this to log all of the properties for a particular font
    UIFont *font = [UIFont fontWithName: fontName size: fontSize];
    CFArrayRef  fontProperties  =  CTFontCopyFeatures ( ( __bridge CTFontRef ) font ) ;
    NSLog(@"properties = %@", fontProperties);
    */

    NSArray *fontFeatureSettings = @[ @{ UIFontFeatureTypeIdentifierKey: @(kLowerCaseType),
                                         UIFontFeatureSelectorIdentifierKey : @(kLowerCaseSmallCapsSelector) } ];

    NSDictionary *fontAttributes = @{ UIFontDescriptorFeatureSettingsAttribute: fontFeatureSettings ,
                                      UIFontDescriptorNameAttribute: FONT_NAME } ;

    UIFontDescriptor *fontDescriptor = [ [UIFontDescriptor alloc] initWithFontAttributes: fontAttributes ];

    return [UIFont fontWithDescriptor:fontDescriptor size:size];
}

@end
于 2013-10-11T19:53:07.700 に答える
10

UIFontSwiftの拡張機能:

extension UIFont {

    func smallCaps() -> UIFont {

        let settings = [[UIFontFeatureTypeIdentifierKey: kLowerCaseType, UIFontFeatureSelectorIdentifierKey: kLowerCaseSmallCapsSelector]]
        let attributes: [String: AnyObject] = [UIFontDescriptorFeatureSettingsAttribute: settings, UIFontDescriptorNameAttribute: fontName]

        return UIFont(descriptor: UIFontDescriptor(fontAttributes: attributes), size: pointSize)
    }
}

使用法:

label.font = UIFont(name: "SourceSansPro-Regular", size: 12)?.smallCaps()

例:

ここに画像の説明を入力してください ここに画像の説明を入力してください

macOSバージョン:

extension NSFont {
    func smallCaps() -> NSFont? {
        let settings = [[NSFontFeatureTypeIdentifierKey: kLowerCaseType, NSFontFeatureSelectorIdentifierKey: kLowerCaseSmallCapsSelector]]
        let attributes: [String: AnyObject] = [NSFontFeatureSettingsAttribute: settings as AnyObject, NSFontNameAttribute: fontName as AnyObject]

        return NSFont(descriptor: NSFontDescriptor(fontAttributes: attributes), size: pointSize)
    }
}

重要:

  • すべてのフォントが機能するわけではありません。 @AnthonyMattoxが言ったように、それらの文字がフォントに含まれているかどうかによって異なります。

  • Example文字列を:ではなく:として設定することを忘れないでEXAMPLEください。

  • 設定はArray<NDSictionary>、ではありませんNSDictonary
于 2016-06-20T15:50:26.057 に答える