iOS 7의 사용자 정의 글꼴


102

게임을 개발 중이며 앱에서 사용자 지정 글꼴을 사용하고 싶습니다. 중요한 경우 SpriteKit을 사용하고 있습니다. 이 https://github.com/deni2s/IBCustomFonts를 사용해 보았지만 이 글꼴로 작동 할 수 없습니다. http://www.fontspace.com/freaky-fonts/emulogic .

다양한 시도를 해봤고 앱의 info.plist에 폰트를 등록했습니다 ... 무슨 일인지 아는 사람 있나요?


코드에서 글꼴을 사용할 때 올바른 이름을 사용하고 있습니까?
Nick

1
당신이이 블로그는 도움이 될 수 있습니다 codewithchris.com/...
쑤 음

답변:


277

우선 저는 SpriteKit이 아무런 차이를 만들지 않는다고 가정합니다.

  1. 프로젝트에 복사 한 .otf 또는 .ttf 글꼴이 필요합니다. 예를 들어 지원 파일에서.
  2. .plist 파일 을 편집해야 합니다. 추가 "응용 프로그램에서 제공하는 글꼴" 당신의 PLIST에과에서 키를 항목 0 당신이 확장자를 가진 당신의 지원 파일을 복사 한 글꼴의 정확한 파일 이름을 복사합니다. 예 : "JosefinSansStd-Light_0.otf"
  3. 앱으로 가져온 글꼴이 앱 자체에 압축되어 있는지 확인하십시오. 당신의 선택에 의해 그렇게 할 대상 , 다음 페이즈를 구축 한 다음 복사 번들 리소스 . 글꼴이 보이지 않으면 지원 파일 에서 드래그하십시오 .

마지막으로 앱이 시작될 때 글꼴에 사용할 수있는 이름을보기 위해 모든 글꼴을 나열하려고합니다. 이 작은 코드로 그렇게 할 것입니다.

NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}

인쇄 된 결과에서 글꼴을 검색합니다. 예를 들어 "Josefin"을 검색하면 실제 글꼴 이름이 "JosefinSansStd-Light"라는 것을 알 수 있습니다. 그 후에는 다음과 같은 방법으로 만 해당 글꼴을 사용해야합니다.

UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];

iOS8에서는 글꼴 을 프로젝트에 직접 추가 하면 인터페이스 빌더에 표시됩니다. 이를 고려하여 코드를 수정하지만 프로그래밍 방식으로 iOS7 용 글꼴을 설정하고 xCode6 인터페이스 빌더에서 선택합니다. 추신. xCode6의 인터페이스 빌더는 아래 코드에 복사하여 붙여 넣을 수있는 올바른 글꼴 이름을 제공합니다.

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
    {
        UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
        self.registerLabel.font = customFont;  
    }

이것이 도움이되기를 바랍니다.


감사! 알았어! 문제는 내가 지원 파일에 추가하고 싶지 않았기 때문에로드되지 않았다는 것입니다. : P
José María

1
나는 plist 키를 사용해야했다UIAppFonts
Mike Flynn 2014 년

1
iOS7 / Xcode 5.1.1의 전체 프로젝트를 iOS8 / Xcode 6.0 프로젝트로 다시 만들었습니다. 2 단계를 수행 할 때까지 사용자 정의 글꼴이 표시되지 않았습니다. Gr8 설명!
MB_iOSDeveloper

1
Swift에서 글꼴 이름을 가져 오는 동일한 코드 : let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
Alexander Bekert 2015

1
모든 글꼴 이름을 인쇄하기위한 몇 가지 빠른 코드 :for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
gimenete

24

사용자 정의 글꼴을 사용하는 데 문제가 없습니다. 다음과 같이하세요:

  1. "응용 프로그램에서 제공하는 글꼴"항목을 추가하여 info.plist에 글꼴을 등록합니다. 글꼴 이름이 아닌 글꼴 파일 이름을 입력하십시오. font.ttf처럼 (이미 그랬다고 생각합니다)
  2. 프로젝트 탐색기에서 프로젝트로 이동하여 프로젝트 이름을 클릭하고 "빌드 단계"로 이동 한 다음 "번들 리소스 복사"에서 아래로 이동하여 맨 아래로 이동하면 많은 파일이 있으며 "+"기호를 검색합니다. 프로젝트 파일이 포함 된 팝업 창이 열립니다. 글꼴 파일을 검색하여 번들에 추가하십시오.
  3. 마지막으로 글꼴 이름을 확인하십시오. 코드에서 사용할 때는 파일 이름이 아닌 글꼴 이름을 사용해야합니다. 글꼴 이름을 확인하려면 Finder에서 글꼴 파일을 두 번 클릭하면 글꼴이 표시된 창이 열립니다. 창 제목을 확인하십시오. 이것이 사용해야하는 글꼴의 이름입니다.

그리고 조언은 ..Prefix.pch 파일에 해당 이름을 매크로로 추가하십시오. 글꼴을 여러 번 사용해야하는 경우 프로젝트에서 사용하기가 더 쉽습니다.

문제는 글꼴을 제대로 등록했지만 앱 번들에 복사되지 않았다는 것입니다. 따라서 앱이 실행될 때 글꼴을 찾을 수 없습니다. 이것이 2 단계가 중요한 이유입니다. 나는 처음으로 그것을 알아 내려고 많은 시간을 보냈다. :)


2
제게 핵심은 글꼴의 제목이었습니다. 감사!
Oscar

20

이를 신속하게 달성하려면

앱이 시작될 때 글꼴의 사용 가능한 이름을보기 위해 모든 글꼴을 나열하려는 경우. 이 작은 코드로 그렇게 할 수 있습니다.

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }

또는UIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") }
Daniel

5

여러 번 시도한 결과 이러한 답변을 얻을 수 없었습니다. 허용 된 답변의 지침을 따르고 글꼴을 사용하는 스토리 보드에 숨겨진 레이블을 만드는 유일한 방법은 사용자 지정 글꼴을 얻었습니다. 프로그래밍 방식으로 글꼴을 사용할 수 있습니다. 내가 아는 이상하고 해키하지만 그것은 나를 위해 일했습니다.


1
당신이 정확히 맞습니다. plist, 프로젝트 대상 확인 표시, 빌드 단계를 포함하여 많은 튜토리얼에서 모든 것을 살펴보고 마침내 올바른 글꼴 패밀리 이름을 찾았지만 여전히 작동하지 않습니다. 그런 다음 말씀하신대로 숨겨진 라벨을 추가했고 마침내 표시되었습니다. Xcode 7.2를 사용 중이며 버그 일 것입니다.
DrZ214

3

Xcode 6을 사용하는 경우 가능한 한 쉽습니다. font프로젝트에 폴더를 추가하고 폴더에 글꼴을 추가하기 만하면 됩니다.

여기에 이미지 설명 입력


7
의도 한 대상에도 추가해야합니다. 교활한 호빗 Xcode.
Matt Parkins 2014

3

위의 방법 중 어느 것도 효과가없고 사용자 정의 글꼴을 "프로그래밍 방식으로"만 사용하는 경우 (즉, xib에서 사용하지 않은 경우), 어느 곳에서나 하나의 xib 어딘가에서 적어도 한 번 사용해야합니다. .

(스튜어트 클락 추신-이미 대답 했으니 제발 신용이 없어요.하지만 나는 그의 대답을 놓 쳤기 때문에 그것을 다시 말하고 별도의 대답으로 게시하기로 결정했습니다. 읽었을 때 명확하지 않았습니다. xib에서 사용자 지정 글꼴을 테스트 할 때 우연히이 솔루션을 사용하고 다른 곳에서 프로그래밍 방식으로 작동하는 것을 보았지만 xib에서 글꼴을 제거하면 프로그래밍 방식으로 작동하지 않습니다.)


2

Swift 3 용으로 업데이트되었습니다.

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}

0

어쩌면 빠른 수정일 수도 있습니다. 이것은 글꼴이 이미 작동했을 때 저를 위해 해냈지만 새로운 예를 들어 Label이 원하는 글꼴을 표시하지 않았습니다.

깨끗하고 깨끗하며 빈 파생 데이터 폴더.


0
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end

@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.