iPhone 응용 프로그램에 사용자 정의 글꼴을 포함시킬 수 있습니까?


772

앱에 텍스트 렌더링을위한 사용자 정의 글꼴을 포함시키고로드 한 다음 UIKit과 같은 표준 요소와 함께 사용하고 싶습니다 UILabel. 이것이 가능한가?


5
스탠포드에서 CS193p (아이폰 응용 프로그램 개발) 강의 중 하나에서, 에반 장치에 자신의 글꼴을 설치하는 것은 적어도 의미에서 그것은 :-) 가능 "많은 일"이라고 지적
일리아의 Birman

2
iPhone 3.2는 사용자 정의 글꼴을 허용하지만 iPad 전용입니다 (아래 답변 참조)
samvermette

6
결국 이미지를 사용했습니다.
Airsource Ltd

2
와우 ... 그 후에도 답은 여전히 ​​이미지입니다 ... 믿을 수없는. 시스템 글꼴과 동일한 기능을 가진 사용자 정의 글꼴을 제대로 구현하기를 바랐습니다. 아아 ...
d2burke

1
나는 질문 이후에 지난 10 년을 반영하기 위해 원래의 질문을 실질적으로 다듬었다. 다른 사람들이 자신의 의견과 답변을 적절하게 다듬을 것을 권장합니다.
Airsource Ltd

답변:


646

iOS 3.2 이상에서 지원합니다. 스트레이트에서 아이폰 OS 3.2의 새로운 기능 문서 :

사용자 정의 글꼴 지원 사용자 정의 글꼴
을 사용하려는 응용 프로그램은 이제 해당 응용 프로그램 번들에 해당 글꼴을 포함시키고 Info.plist 파일에 UIAppFonts 키를 포함시켜 해당 글꼴을 시스템에 등록 할 수 있습니다. 이 키의 값은 응용 프로그램 번들에서 글꼴 파일을 식별하는 문자열 배열입니다. 시스템은 키를 볼 때 지정된 글꼴을로드하여 응용 프로그램에서 사용할 수있게합니다.

글꼴이에서 설정되면 Info.plistIB의 다른 글꼴로 또는 프로그래밍 방식으로 사용자 지정 글꼴을 사용할 수 있습니다.

Apple 개발자 포럼에는
https://devforums.apple.com/thread/37824 스레드가 있습니다 (로그인 필요).

그리고 이것을 달성하는 방법에 대한 훌륭하고 간단한 3 단계 튜토리얼이 있습니다 (깨진 링크 제거)

  1. Xcode를 리소스로 사용하여 사용자 정의 글꼴 파일을 프로젝트에 추가
  2. Info.plist파일에 키를 추가하십시오 UIAppFonts.
  3. 이 키를 배열로 만듭니다
  4. 가지고있는 각 글꼴에 대해 UIAppFonts배열의 항목으로 글꼴 파일의 전체 이름 (확장명 포함)을 입력하십시오.
  5. 저장 Info.plist
  6. 이제 응용 프로그램에서 UILabelsUITextViews 등에 [UIFont fontWithName:@"CustomFontName" size:12]사용할 사용자 정의 글꼴을 얻기 위해 간단히 호출 할 수 있습니다 ...

또한 : 글꼴이 사본 번들 자원에 있는지 확인하십시오.


14
iOS4 용 단계별 자습서는 다음과 같습니다. blog.beefyapps.com/2010/06/custom-fonts-in-ios-4
pm_labs

15
이 튜토리얼은 매우 좋습니다. shang-liang.com/blog/custom-fonts-in-ios4 중요하게, [UIFont fontWithName : ...]에 대한 NSString 인수 는 파일 이름이 아닌 글꼴 의 OS 이름입니다.
Willster

152
다른 사람이 iOS에 필요한 글꼴의 실제 포스트 스크립트 이름을 찾기 위해 fontforge를 설치하는 데 3 시간을 소비하기 전에. 이 정보를 찾으려면 서체 관리자의 서체에서 Cmd + I를 누르기 만하면됩니다.
Daniel Wood

42
올바른 글꼴 이름을 얻는 데 어려움을 겪은 후 설치된 글꼴을 나열하고 찾았습니다. 매우 도움이됩니다. 코드는 다음과 같습니다. for ([UIFont familyNames]의 NSString * familyName) {NSLog (@ "Family % @", familyName); NSLog (@ "Names = % @", [UIFont fontNamesForFamilyName : familyName]); }
Steve Potter

26
코드가 작동하지 않으면 글꼴 파일이 "빌드 단계"-> "번들 저장소 복사"에 표시되는지 확인하십시오
Mickey

299

편집 : iOS 3.2 부터이 기능이 내장되어 있습니다. 3.2 이전을 지원 해야하는 경우이 솔루션을 계속 사용할 수 있습니다.

UILabel.ttf 파일로드 를 확장 하고 처리 하는 간단한 모듈을 만들었습니다 . Apache 라이센스에 따라 오픈 소스를 공개하고 github Here 에 넣었습니다 .

중요한 파일은 FontLabel.hFontLabel.m입니다.

Genericrich 's answer 의 코드 중 일부를 사용합니다 .

여기 에서 소스를 찾아보십시오 .

또는

  • 글꼴 파일을 리소스에 복사

  • Info.plistUIAppFonts라는 파일에 키를 추가하십시오 . ( "응용 프로그램에서 제공 한 글꼴)

  • 이 키를 배열로 만듭니다

  • 가지고있는 각 글꼴에 대해 UIAppFonts 배열의 항목으로 글꼴 파일 (확장명 포함)의 전체 이름을 입력하십시오.

  • 저장 Info.plist

  • 이제 응용 프로그램에서 간단하게 호출 [UIFont fontWithName:@"CustomFontName" size:15]하여 UILabelsand UITextViews등에서 사용할 사용자 정의 글꼴을 얻을 수 있습니다 .

자세한 내용은


2
코드를 사용해 보았지만 글꼴에 따라 자주 충돌합니다. 예를 들어, fontspace.com/category/tiki 에서 아프리카 또는 티키 글꼴을 사용해보십시오 .
4thSpace

2
이 라이브러리는 훌륭하게 작동합니다. 세로 간격에 대한 도움이 필요합니다. 그것을하는 방법을 알 수 없습니다. 그래서 나는이 메시지를 가지고있다 .numberOfLines = 3; 라인 1과 라인 2와 라인 3 사이의 수직 간격을 어떻게 제어합니까? , 티 주셔서 감사합니다
teepusink

2
@commanda 안녕하세요 commanda, 답변에 제공 한 링크를 사용할 수없는 것 같습니다.
Parth Bhatt

5
@ParthBhatt 이제 FontLabel 대신 stackoverflow.com/a/2616101/21447 에서 제공되는 솔루션을 사용해야합니다. 이 기능은 이제 CocoaTouch에서 제공되기 때문입니다.
commanda

2
@ParthBhatt : 레포가 zynga에서 더 이상 호스팅되지 않는 이유를 모르겠지만 github.com/kballard/fontlabel
Lily Ballard

116

iOS 4 에서 커스텀 글꼴을 사용하는 간단한 방법이 있습니다 .

  1. (예를 들어, 글꼴 파일을 추가 Chalkduster.ttf로) 자원 엑스 코드에서 프로젝트의 폴더.
  2. info.plist이라는 새 키를 열고 추가하십시오 UIAppFonts. 이 키의 유형은 배열이어야합니다.
  3. 확장 ( Chalkduster.ttf)을 포함하여 사용자 정의 글꼴 이름을이 배열에 추가하십시오 .
  4. 이제 [UIFont fontWithName:@"Chalkduster" size:16]응용 프로그램에서 사용할 수 있습니다 .

불행히도 IB는 사용자 정의 글꼴로 레이블을 초기화 할 수 없습니다. 이 문제 를 해결하려면 이 질문 을 참조하십시오 . 내가 가장 좋아하는 솔루션은 사용자 정의 UILabel하위 클래스 를 사용하는 것입니다 .

@implementation CustomFontLabel

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder: decoder])
    {
        [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
    }
    return self;
}

@end

3
이것은 4.0 이상이 아닌 3.2로 다시 지원되는 것 같습니다
Jesse Rusak

1
감사! 내가 겪고있는 문제는 사용자 정의 글꼴이 내장 글꼴에 비해 약간 높음 (추가 공간)으로 보인다는 것입니다. GitHub의 FontLabel 저장소를 사용해 보았습니다. 시간에 도움이되지만 항상 그런 것은 아닙니다.
Joe D' Andrea

12
당신이 UIFont 생성자에 전달하는 문자열이 있음을 지적 그것의 가치가 NOT 파일 이름을 뺀 확장의 글꼴의 내부 이름. 줄어든 파일 이름으로 글꼴을로드하는 데 문제가있었습니다. 파일에 포함 된 전체 글꼴 이름을 사용하면 글꼴이 올바르게로드되었습니다.
slayton

5
슬레이튼이 방금 말한 것은 중요합니다. [UIFont fontWithName는 : 서체에를 열고 선택하여 볼 수있는 글꼴의 "이름"을 기대 : 미리보기 ->보기 폰트 정보
electromaggot

51

Info.plist에서 "응용 프로그램에서 제공 한 글꼴"항목을 추가하고 글꼴 이름을 문자열로 포함하십시오.

Fonts provided by application
           Item 0        myfontname.ttf
           Item 1        myfontname-bold.ttf
           ...

그런 다음 다음을 실행하여 글꼴이 포함되어 있는지 확인하십시오.

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

ttf 파일 이름은 레이블의 글꼴을 설정할 때 사용하는 이름과 다를 수 있습니다 (위의 코드를 사용하여 "fontWithName"매개 변수를 얻을 수 있음).

[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];

36

편집 :이 답변은 iOS3.2에서 없어졌습니다. UIAppFonts 사용

내가 성공적으로 사용자 정의를로드 할 수있는 유일한 방법 UIFont은 개인 GraphicsServices 프레임 워크를 사용하는 것입니다.

다음은 .ttf응용 프로그램의 기본 번들에있는 모든 글꼴을 로드합니다 .

BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
    return newFontCount;
}

글꼴이로드되면 Apple에서 제공 한 글꼴처럼 사용할 수 있습니다.

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

API가 나중에 사라질 경우를 대비하여 런타임에 GraphicsServices를로드 할 수도 있습니다.

#import <dlfcn.h>
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
    const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
    if (frameworkPath) {
        void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
        if (graphicsServices) {
            BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
            if (GSFontAddFromFile)
                for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                    newFontCount += GSFontAddFromFile([fontFile UTF8String]);
        }
    }
    return newFontCount;
}

사람들에게 참고가이 작업을 수행, 궁금하지만, 당신이 바로 글꼴을 사용하기 전에 loadFonts를 호출해야합니다 - 그들은 응용 프로그램 전체로드를 유지하지 않는 것
픽셀

OS 3.0에서는 두 번째 두 번째 예를 반드시 사용해야합니다. 가져 오기를 잊지 마십시오. 나를 위해 아주 잘 작동했습니다.
M. Ryan

또 다른 참고 사항-이것은 비공개 프레임 워크이며 동적으로로드합니다 ... 둘 다 앱 스토어에 앱을 더 이상 허용하지 않을 것입니다.
pixel

결론은 무엇입니까? 이 방법의 대안은 무엇입니까?
Raj Pawan Gumdal

1
또한 [NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];내가 시도한 모든 사용자 정의 글꼴에 대해 너비와 높이를 0으로 반환합니다.
Luke Mcneice

34

iOS 8+과 Xcode 6+ 당신은 쉽게 만들 수 있습니다. 단계는 다음과 같습니다.

1) 서체를 XcodeSupporting Files 폴더 로 끌어다 놓습니다 . 대상추가 섹션 에서 앱을 표시하는 것을 잊지 마십시오 . 지금부터이 글꼴을 사용 IB하고 글꼴 팔레트에서 선택할 수 있습니다.

여기에 이미지 설명을 입력하십시오

2) 장치에서이 글꼴을 사용할 수있게하려면 info.plistFonts provided by application키를 추가하십시오 . 항목 0 키를 포함하므로 글꼴 이름을 값으로 추가해야합니다. 글꼴 이름은 글꼴 파일 이름과 다를 수 있습니다. 그러나 먼저 대부분의 경우 파일 이름을 추가하십시오.

여기에 이미지 설명을 입력하십시오

그렇지 않은 경우이 기사는 항상 도움 되었습니다.

글꼴 이름을 찾는 데 도움이되는이 기사의 코드는 다음과 같습니다.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


       for name in UIFont.fontNamesForFamilyName(family.description)
       {
           println("  \(name)")
       }

   }

}

편집하다

폰트 파일을 Target의 Build Phases , Copy Bundle Resources 에 추가해야한다고 언급하고 싶습니다 . 그렇지 않으면 장치에 글꼴이 표시되지 않습니다. 그리고 예기치 않은 행동으로 이어질 수 있습니다.

예를 들어, 내가가 발생 bug하는 경우, UITextField사용자 정의 글꼴을 가지고 있지만,이 글꼴은 아니었다 복사 번들 자원 . 그리고 viewcontrollerwith를 사용하면 함수가 호출 textfield되기 전에 약 4 초 지연 viewDidLoad됩니다. 글꼴 문제를 해결하면이 지연이 제거되었습니다. 따라서 두 번 확인하는 것이 좋습니다. (rdar : // 20028250) Btw, 버그를 재현 할 수 없었지만 문제가 글꼴에 있다고 확신합니다.


1
그냥 참고하십시오. IB에서 올바르게 구성된 경우에도 LaunchScreens에서 사용자 정의 글꼴을 사용할 수 없습니다. 논리가 될 수 있습니다.
Rivera

@ 리베라 와우, 좋은 메모! 몰랐어요 가능한 대안은 텍스트 대신 UIImage를 사용하는 것입니다.
Dima Deplov

@Rivera, 그 정보에 감사드립니다-어디서나 문서화되어 있습니까? 나는 단계를 놓쳤다 고 생각하면서 단계를 반복적으로 밟고있었습니다.
spongessuck

@ spongessuck 귀하의 질문에 대해 확실하지 않지만 일부 문서는 developer.apple.com/library/ios/documentation/StringsTextFonts/…
Dima Deplov

27

나는 이것을 이렇게했다 :

글꼴을로드하십시오.

- (void)loadFont{
  // Get the path to our custom font and create a data provider.
  NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"]; 
  CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);

  // Create the font with the data provider, then release the data provider.
  customFont = CGFontCreateWithDataProvider(fontDataProvider);
  CGDataProviderRelease(fontDataProvider); 
}

이제에서 drawRect:다음과 같이하십시오.

-(void)drawRect:(CGRect)rect{
    [super drawRect:rect];
    // Get the context.
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    // Set the customFont to be the font used to draw.
    CGContextSetFont(context, customFont);

    // Set how the context draws the font, what color, how big.
    CGContextSetTextDrawingMode(context, kCGTextFillStroke);
    CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
    UIColor * strokeColor = [UIColor blackColor];
    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
    CGContextSetFontSize(context, 48.0f);

    // Create an array of Glyph's the size of text that will be drawn.
    CGGlyph textToPrint[[self.theText length]];

    // Loop through the entire length of the text.
    for (int i = 0; i < [self.theText length]; ++i) {
        // Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
        textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
    }
    CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
    CGContextSetTextMatrix(context, textTransform);
    CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
}

기본적으로 글꼴에서 오프셋을 찾기 위해 텍스트를 통해 루핑하고 매직 번호로 퍼징해야합니다 (29, 나를 사용하여 참조하십시오).하지만 작동합니다.

또한 글꼴을 합법적으로 포함 할 수 있는지 확인해야합니다. 대부분은 그렇지 않으며 이런 종류의 전문 변호사가 있으므로 경고하십시오.


1
잘 작동한다고 확신하지만 UILabel 및 UITextView가 현재 나를 위해 수행하는 모든 작업, 특히 단어 줄 바꿈, 위치 지정 및 편집을 처리하기 위해 자체 레이아웃 엔진을 작성하고 싶지 않습니다.
Airsource Ltd

1
AFAICS는 대문자로만 작동하므로 'uppercaseString'호출입니다.
Martin Cote

2
"매직 넘버"트릭은 실제로 작동하지 않는 순수한 핵이기 때문에 저는 하향 투표를합니다. 실제 솔루션은 TTF 파일에서 cmap 테이블을 얻는 것입니다.
Martin Cote

1
이것은 Core Graphics에서 직접 글꼴을 사용하는 방법에 대한 깔끔한 정보입니다. 향후 독자를 위해 업데이트하기 위해 : 최신 OS에서는 핵심 텍스트를 사용할 수 있고 사용해야합니다. 또는 CGContextShowTextAtPoint()UTF-8에서는 작동하지 않지만 사용할 수 있습니다 .
Ivan Vučica

20

예, 사용자 정의 글꼴을 포함 할 수 있습니다. UIFont의 문서, 특히 fontWithName:size:메소드를 참조하십시오 .

1) 리소스 폴더에 글꼴이 포함되어 있는지 확인하십시오.

2) 글꼴의 "이름"은 반드시 파일 이름 일 필요는 없습니다.

3) 해당 글꼴을 사용할 수있는 법적 권리가 있는지 확인하십시오. 앱에 앱을 포함 시키면 앱도 배포되므로이를 수행 할 권한이 있어야합니다.


실제로이 작업을 성공적으로 수행 했습니까? 나는 그것을 작동시킬 수 없으며 인터넷 검색은 그것을 시도하고 실패한 다른 사람들 만 찾습니다.
Airsource Ltd

예. 나는 가지고있다. 다시 한 번 올바른 글꼴 이름을 사용하고 있는지 확인하십시오.
08

1
"글꼴의"이름 "이 반드시 파일 이름 일 필요는 없습니다. ... 올바른 이름을 어떻게 찾을 수 있습니까?
키이스 피츠 제럴드

7
네,이 대답은 틀 렸습니다. 이 작업은 즉시 수행 할 수 없습니다.
Jonathan Sterling

iOS 9 업데이트, UIFont 문서는 사용자 정의 글꼴에 대해 언급하지 않습니다
Cbas

20

당신이 사용하는 경우 xcode 4.3, 당신은 추가해야 font받는 사람 Build Phase아래 Copy Bundle Resources에 따르면, https://stackoverflow.com/users/1292829/arne 스레드에서 사용자 정의 글꼴 엑스 코드 4.3 . 이것은 나를 위해 일했습니다. 사용자 정의 글꼴이 내 앱에서 작동하기 위해 취한 단계는 다음과 같습니다.

  1. 글꼴을 프로젝트에 추가하십시오. OTF(또는 TTF) 파일을 내가 만든 새 그룹으로 끌어다 놓고 xcode의 선택을 수락했습니다 copying the files over to the project folder.
  2. UIAppFonts배열 내에서 글꼴이 항목으로 나열된 배열을 만듭니다 . 그냥 names이 아닌 확장자 (예 : " GothamBold", " GothamBold-Italic").
  3. 화면 왼쪽 project name상단의 길을 클릭하십시오 Project Navigator.
  4. Build Phasesxcode의 메인 영역에 나타나는 탭을 클릭하십시오 .
  5. " Copy Bundle Resources"섹션을 펼치고을 클릭 "+"하여 글꼴을 추가하십시오.
  6. 파일 탐색기에서을 클릭하면 열리는 글꼴 파일을 선택하십시오 "+".
  7. 필요한 모든 글꼴에 대해이 작업을 수행하십시오 add to the project.

12

단계별 지침은 다음과 같습니다. 추가 라이브러리 나 특별한 코딩이 필요하지 않습니다.

http://shang-liang.com/blog/custom-fonts-in-ios4/

대부분의 경우 문제는 글꼴이 아닌 방법입니다. 가장 좋은 방법은 verdana 또는 geogia와 같이 작동하는 글꼴을 사용하는 것입니다. 그런 다음 원하는 글꼴로 변경하십시오. 작동하지 않으면 글꼴 이름이 잘못되었거나 글꼴의 형식이 올바르지 않은 글꼴 일 수 있습니다.


12

기존 iOS 앱에서 새 글꼴을 추가하는 것은 매우 쉽습니다.

font.ttf 같은 글꼴을 리소스 폴더에 추가하기 만하면됩니다.

응용 프로그램을 엽니 다 info.plist. "응용 프로그램에서 제공 한 글꼴"로 새 행을 추가하고 글꼴 이름을 font.ttf로 입력하십시오.

그리고 글꼴을 설정할 때 setFont:"corresponding Font Name"

에 의해 글꼴이 추가되었는지 여부를 확인할 수 있습니다 NSArray *check = [UIFont familyNames];.

응용 프로그램이 지원하는 모든 글꼴을 반환합니다.


11

: 여기 내가 좋아하는 짧은 튜토리얼 한 다음 추천 할 것입니다 http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ 이 정보가 제공되는합니다.

1 단계-.ttf 또는 .otf를 Finder에서 프로젝트로 드래그

참고-기본 응용 프로그램 대상에서 '대상에 추가'상자를 클릭하십시오.

글꼴 파일을 프로젝트로 드래그하고 클릭하여 대상에 추가하십시오

클릭하여 대상에 추가하는 것을 잊은 경우 프로젝트 계층에서 글꼴 파일을 클릭하고 오른쪽 패널에서 대상 멤버십 섹션 에서 기본 앱 대상을 클릭하십시오.

잊어 버린 경우 앱 대상에 글꼴을 추가하는 방법

글꼴이 앱 대상의 일부인지 확인하려면 빌드 단계복사 번들 리소스 에 글꼴이 표시되는지 확인하십시오.

리소스가 글꼴이 앱 대상의 일부인지 확인하는 방법

2 단계-글꼴 파일 이름을 Plist에 추가

정보 섹션 의 사용자 지정 iOS 대상 속성 으로 이동하여 해당 섹션의 항목에 키를 추가 하십시오 (입력 할 때 옵션으로 표시되고 배열로 설정 됨). 작은 화살표를 클릭하십시오. 배열 항목을 열고 추가 한 .ttf 또는 .otf 파일의 이름을 입력하여 사용 가능한 글꼴 파일임을 앱에 알리십시오.Fonts provided by application

참고-이 단계 직후에 앱이 다운되면 여기에 추가 한 항목의 철자를 확인하십시오.

사용자 정의 글꼴이 추가 된 예제 plist

3 단계-글꼴 이름을 찾아서 호출 할 수 있습니다.

응용 프로그램에서 볼 수있는 글꼴 이름은 해당 글꼴의 파일 이름을 기반으로 생각하는 것과 다른 경우가 많습니다. 코드에 넣고 응용 프로그램에서 로그에서 어떤 글꼴 이름을 호출하는지 확인하는 로그를 살펴보십시오.

빠른

for family: String in UIFont.familyNames(){
  print("\(family)")
  for names: String in UIFont.fontNamesForFamilyName(family){
      print("== \(names)")
  }
}

목표 C

for (NSString* family in [UIFont familyNames]){
    NSLog(@"%@", family);
    for (NSString* name in [UIFont fontNamesForFamilyName: family]){
        NSLog(@"  %@", name);
    }
}

로그는 다음과 같아야합니다.

글꼴 이름을 찾기 위해 로그를 검색하는 예

4 단계-3 단계의 이름을 사용하여 새 사용자 정의 글꼴 사용

빠른

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

목표 C

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];

10

파인더와 "정보 입수"에서 TTF를 찾으십시오. "Full name :"이라는 제목 아래에 내가 사용했던 fontWithName이름을 입력했습니다. (이 경우에는 '.ttf'확장자가 필요하지 않은 정확한 이름을 복사하여 붙여 넣었습니다.)


8

아직 나오지는 않지만 다음 버전의 cocos2d (2d 게임 프레임 워크)는 가변 길이 비트 맵 글꼴을 문자 맵으로 지원합니다.

http://code.google.com/p/cocos2d-iphone/issues/detail?id=317

필자는이 버전의 출시 날짜를 정하지 않았지만 다음 달 또는 두 달 안에 게시 될 예정이라는 게시물을 보았습니다.


8

한 가지 중요한주의 사항 : 전체 이름이나 가족 이름이 아니라 글꼴과 관련된 "PostScript 이름"을 사용해야합니다. 이 이름은 보통 일반 글꼴 이름과 다를 수 있습니다.


7

이 단계를 따르십시오

1) 프로젝트에서 글꼴을 복사하십시오.

2) .plist소스 코드 모드에서 파일 열기 ... (주- 열지 마십시오 info.plist)

3) 그 전에-글꼴을 마우스 오른쪽 버튼으로 클릭하고 fontforge 또는 유사한 편집기에서 열고 install 시스템에서 .install

4) 이것을 입력하십시오

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5)이 코드를 class .m

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

여기에서 lblPoints는 UILabel

끝난!! 그래도 글꼴이 작동하지 않으면 먼저 글꼴 호환성을 확인하십시오


1
왜 열지 info.plist않습니까?
랩터

포인트 4에 Plist에없는 경우 5 번째 포인트에서 Myraid와 Pro 사이에 공간이있는 이유는 무엇입니까?
jayant rawat

@jayantrawat 글꼴을 설치 한 후 시스템에 표시되는 글꼴 이름이며 .plist는 글꼴 파일의 이름입니다 [.ttl 또는 otf]
Kirtikumar A.

@KirtikumarA. 그렇습니다 그것을 얻었습니다. 앱에서 성공적으로 구현되었습니다.
jayant rawat

내 솔루션이 당신에게 요청 후 도움이된다면 @jayantrawat주고 upvote에 다른 사용자가 도움이 같은 방식을 취할 수 있도록 대답에
Kirtikumar A.

6

어쩌면 저자는 글꼴에 Mac FOND 이름 을 부여하는 것을 잊었을 까요?

  1. FontForge 에서 글꼴을 연 다음 Element> Font Info로 이동하십시오.
  2. 글꼴 이름을 설정할 수있는 "Mac"옵션이 있습니다.
  3. 파일> 글꼴 내보내기에서 새 ttf를 만들 수 있습니다

내보내기 대화 상자에서 "Apple"옵션을 사용해 볼 수도 있습니다.

면책 조항 : 저는 아이폰 개발자가 아닙니다!


6

iOS 3.1.2 의이 페이지에서 다양한 제안을 시도해 왔으며 이것이 내 결론입니다.

[UIFont fontWithName:size:]FOND 이름이 FontForge를 사용하여 설정되어 있어도 Resources 디렉토리의 글꼴과 함께 사용하면 작동하지 않습니다.

[UIFont fontWithName:size:]GSFontAddFromFile을 사용하여 글꼴을 먼저로드하면 작동합니다. 그러나 GSFontAddFromFileiOS 3.1.2의 일부는 아니므로 @rpetrich에서 설명한대로 동적으로로드되어야합니다.


5

찾다 ATSApplicationFontsPath

간단한 plist 항목으로 앱 리소스 폴더에 글꼴 파일을 포함시킬 수 있으며 앱에서 "작동"할 수 있습니다.


장치에서 이것을 시도 했습니까? 나는 기쁨이 없었으며 인터넷 검색은이 plist 항목이 iPhone OS 용으로 문서화되었지만 iPhone에서 지원되지 않는다고 제안합니다.
Airsource Ltd

1
죄송합니다. 현재 OS X 앱에서만 사용하고 있습니다.
Matt Sephton 2009

5

이 페이지의 조언 중 일부를 iOS 5에서 나에게 적합한 것으로 결합했습니다.

먼저 프로젝트에 사용자 정의 글꼴을 추가해야합니다. 그런 다음 @iPhoneDev의 조언을 따라 info.plist 파일에 글꼴을 추가해야합니다.

그렇게 한 후에는 다음과 같이 작동합니다.

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

그러나 글꼴의 포스트 스크립트 이름을 알아야합니다. @Daniel Wood의 조언을 따르고 FontBook에있는 동안 command-i를 누르십시오.

그런 다음 사용자 정의 글꼴을 즐기십시오.


5

먼저 리소스에 .odt 형식의 글꼴을 추가하십시오.이 경우 DINEngschriftStd.otf를 사용하고이 코드를 사용하여 글꼴을 레이블에 지정하십시오.

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

프로젝트에 글꼴이로드되었는지 확인하려면 전화하십시오.

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

.plist에서 글꼴을 선언해야합니다. '응용 프로그램에서 제공 한 글꼴'레코드를 추가하고 글꼴 이름 (DINEngschriftStd.otf)으로 항목 0 문자열을 추가하십시오.


5

iOS 3.2 이상 : 위의 여러 가지 방법을 사용하십시오.

  1. XCode에서 프로젝트의 Resources 폴더에 글꼴 파일 (예 : Chalkduster.ttf )을 추가하십시오 .
  2. info.plist를 열고 UIAppFonts라는 새 키를 추가하십시오. 이 키의 유형은 배열이어야합니다.
  3. 확장명 ( " Chalkduster.ttf ")을 포함하여 사용자 정의 글꼴 이름을이 배열에 추가하십시오 .
  4. [UIFont fontWithName:@"Real Font Name" size:16]응용 프로그램에서 사용하십시오 .

그러나 "실제 글꼴 이름"이 항상 Fontbook에 나타나는 것은 아닙니다. 가장 좋은 방법은 장치에 표시되는 글꼴과 정확한 이름을 묻는 것입니다.

나는 uifont-name-grabber에 게시 된 uifont-name-grabber를 사용합니다.

원하는 글꼴을 xcode 프로젝트에 드롭하고 파일 이름을 plist에 추가 한 다음 빌드하려는 장치에서 실행하면 원하는 이름을 사용하여 완전한 글꼴 목록을 이메일로 보내드립니다 UIFont fontWithName:.


5

더 나은 해결책은 파일에 새 속성 " Fonts provided by application"을 추가하는 것 info.plist입니다.

그런 다음 normal과 같은 사용자 정의 글꼴을 사용할 수 있습니다 UIFont.


3

iOS 4.1부터 사용자 정의 글꼴을 사용하는 새로운 방법이 있습니다. 앱에 포함 된 파일, 다운로드 한 데이터 또는 내가 가지고있는 것에서 글꼴을 동적으로로드 할 수 있습니다. 또한 필요에 따라 글꼴을로드 할 수 있지만 이전 방법은 앱 시작시 글꼴을 모두로드하므로 글꼴이 많으면 시간이 오래 걸릴 수 있습니다.

새로운 방법은 ios-dynamic-font-loading에 설명되어 있습니다.

CTFontManagerRegisterGraphicsFont함수를 사용 하여 글꼴 데이터가 포함 된 버퍼를 제공합니다. 그런 다음 UIFont이전 방법과 마찬가지로 웹보기 및 웹보기 를 사용할 수 있습니다 . 해당 링크의 샘플 코드는 다음과 같습니다.

NSData *inData = /* your font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
    CFStringRef errorDescription = CFErrorCopyDescription(error)
    NSLog(@"Failed to load font: %@", errorDescription);
    CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);

이 코드를 사용했지만 & error 글꼴을로드하지 못했습니다 : 작업을 완료 할 수 없습니다. (com.apple.coretext 오류 105-CGFont '<CGFont (0x14fe7df0) : Shruti>'등록 할 수 없음)
Hiren

문서에 따르면 오류 105는 kCTFontManagerErrorAlreadyRegistered"파일이 이미 지정된 범위에 등록되었습니다."입니다. developer.apple.com/library/ios/#documentation/Carbon/Reference/…
David M.

3

스위프트, 코드 방식 : (swift 2.0에서도 작동)

이미지에 추가하고 Xcode로 드래그하는 것과 같이 프로젝트에 필요한 글꼴을 추가하고 프로젝트를 대상으로하는지 확인하십시오.
이 방법을 추가하고 사용자 정의 글꼴을로드하십시오 (에서 권장 appDelegate didFinishLaunchingWithOptions)

func loadFont(filePath: String) {

    let fontData = NSData(contentsOfFile: filePath)!

    let dataProvider = CGDataProviderCreateWithCFData(fontData)
    let cgFont = CGFontCreateWithDataProvider(dataProvider)!

    var error: Unmanaged<CFError>?
    if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
        let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
        print("Unable to load font: %@", errorDescription, terminator: "")
    }

}

사용 예 :

if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
      loadFont(fontPath)
}

글꼴을 사용하십시오.

UIFont(name: "My-Font", size: 16.5)

궁금한 점은 Info.plist에 글꼴을 추가하지 않는 방법이 본질적으로 동일한 작업에 훨씬 더 많은 것처럼 보입니다.
Stephen Jesse

2

resources 폴더 내에 필요한 "FONT"파일을 추가 할 수 있습니다. 그런 다음 프로젝트 Info.plist파일 로 이동 하여 키 "응용 프로그램에서 제공 한 글꼴"과 값을 "FONT NAME"으로 사용하십시오.

그런 다음 메소드를 호출 할 수 있습니다 [UIFont fontwithName:@"FONT NAME" size:12];


1

나는 모든 것을 가능하게했지만 새로운 글꼴은 나타나지 않으므로 해결책을 찾았습니다.

fot 파일 (otf 또는 ttf)을 드래그 할 때 "대상에 추가"아래의 확인란을 선택하는 것을 잊지 마십시오.

그런 다음 글꼴이 나타나고 모든 것이 잘 작동합니다.


1

위의 답변 중 일부는 정확하지만 글꼴에 여전히 문제가있는 사람들을위한 자세한 시각적 자습서를 작성했습니다.

plist에 글꼴을 추가하고 사용하도록 알려주는 위의 솔루션

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

올바른 것입니다. 이제 다른 해키 방식을 사용하십시오. 여전히 글꼴 이름을 찾아서 추가하는 데 문제가있는 경우 자습서는 다음과 같습니다.

iOS 애플리케이션에서 사용자 정의 글꼴 사용


방금 시도했습니다. 작동하는 것 같지만 크기에 관계없이 글꼴이 작습니다. 그만한 가치가있는, 나는 자유롭게 사용할 수있는 OTF 파일을 사용하고 있습니다 : philsfonts.com/index.php/free_fonts
ari gold

다른 사용자 정의 글꼴로 사용해보십시오. 문제가 지속되면 알려주십시오. 그 방식으로 작동하면 글꼴에 문제가있는 것입니다.
Bharat Gulati

1

예, 응용 프로그램에서 사용자 정의 글꼴을 사용할 수 있습니다

거기에 따라 단계별로 :

지원 파일에서 프로젝트에 사용자 정의 글꼴 파일 추가

UIAppFonts라는 Info.plist 파일에 키를 추가하십시오.

이 키를 배열로 만듭니다

가지고있는 각 글꼴에 대해 글꼴 파일 (확장명 포함)의 전체 이름을 UIAppFonts 배열의 항목으로 입력하십시오.

Info.plist 저장 이제 응용 프로그램에서 [UIFont fontWithName : @ "사용자 정의 글꼴 이름"크기 : 20]을 호출하여 올바른 글꼴을 얻지 못한 경우이를 적용한 후 UILabels에서 사용할 사용자 정의 글꼴을 가져 오려면 두 번 클릭하십시오. 사용자 정의 글꼴에서, 위쪽 글꼴 이름이오고 있음을주의 깊게보고이 글꼴을 복사하여 붙여 넣으십시오.

나는 당신이 정답을 얻을 수 있기를 바랍니다


1

예, 응용 프로그램에서 사용자 정의 글꼴을 사용할 수 있습니다

거기에 따라 단계별로 :

  • 지원 파일에서 프로젝트에 사용자 정의 글꼴 파일 추가
  • Info.plistUIAppFonts라는 파일에 키를 추가하십시오 .
  • 이 키를 배열로 만듭니다
  • 가지고있는 각 글꼴에 대해 글꼴 파일 (확장명 포함)의 전체 이름을 UIAppFonts 배열의 항목으로 입력하십시오.
  • Info.plist 응용 프로그램에서 지금 저장 하면 간단하게 전화 [UIFont fontWithName:@"your Custom font Name" size:20]하여 사용자 정의 글꼴을 사용할 수 있습니다.UILabels

올바른 글꼴을 얻지 못하면이 글꼴을 적용한 다음 사용자 정의 글꼴을 두 번 클릭하고 상단 글꼴 이름이오고 글꼴을 복사하여 붙여 넣습니다. 여기에서 [UIFont fontWithName:@" here past your Custom font Name" size:20] 올바른 답변을 얻을 수 있기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.