2013-10-23 2 views
8

UI 용 사용자 정의 글꼴을 사용해야하는 ios 응용 프로그램에서 작업 중입니다. 새로운 맞춤 글꼴을 응용 프로그램에 통합하는 방법을 알고 있습니다. 그럴 경우ios 응용 프로그램에서 시스템 글꼴로 사용자 정의 글꼴 패밀리를 설정하는 방법

  1. .ttf extention을 사용하여 글꼴 패밀리 파일을 다운로드하십시오.
  2. 리소스 번들에 추가하십시오.
  3. info.plist 파일에서 키로 추가 응용 프로그램에서 제공 한 글꼴.

이 사용자 지정 글꼴은 효과를 나타냅니다. 하지만 내가하고 싶은 것은 systemFont로 설정하고 싶습니다. 그래서 모든 UI 요소에서 설정할 필요가 없습니다.

내가 원하는

[[UIApplication sharedApplication] systemFont:@"Arial"]; 

같은이 가능합니까? 어느 누구도 이걸 도와 줄 수 있습니까?

+0

이되었다 '[[UILabel의 모습] setFont : [UIFont fontWithName : @ "YourFontName"size : 17.0]] ' os는 이제 사용되지 않습니다. 좋은 대답 인 StuartM의 링크를 살펴보십시오. – brainray

답변

16

iOS 7 용으로 iOS 앱을 업데이트 할 때도 같은 문제가있었습니다. 글꼴 (예 : 선택기)을 사용자 정의 할 수없는 컨트롤의 경우에도 전체 애플리케이션에 맞춤 글꼴을 설정하고 싶습니다.
웹과 트위터에 대한 약간의 연구 끝에 메소드 교환 (Swizzling)을 사용하여 해결했습니다. 이는 메소드 구현을 교환하는 방식입니다.

참고 :이 방법은주의해서 사용하지 않으면 위험 할 수 있습니다! SO에서이 토론을 읽어 : Dangers of Method Swizzling

그러나, 이것은 무엇이다

  1. 이 UIFont + CustomSystemFont 같은 UIFont 범주를 만듭니다.
  2. .m 파일에 <objc/runtime.h>을 가져 오십시오.
  3. 는 수정되지 않은 .H 파일을두고하는 .m에이 코드를 추가합니다 :
+(UIFont *)regularFontWithSize:(CGFloat)size 
{ 
    return [UIFont fontWithName:@"Your Font Name Here" size:size]; 
} 

+(UIFont *)boldFontWithSize:(CGFloat)size 
{ 
    return [UIFont fontWithName:@"Your Bold Font Name Here" size:size]; 
} 

// 방법 스위 즐링

+(void)load 
{ 
    SEL original = @selector(systemFontOfSize:); 
    SEL modified = @selector(regularFontWithSize:); 
    SEL originalBold = @selector(boldSystemFontOfSize:); 
    SEL modifiedBold = @selector(boldFontWithSize:); 

    Method originalMethod = class_getClassMethod(self, original); 
    Method modifiedMethod = class_getClassMethod(self, modified); 
    method_exchangeImplementations(originalMethod, modifiedMethod); 

    Method originalBoldMethod = class_getClassMethod(self, originalBold); 
    Method modifiedBoldMethod = class_getClassMethod(self, modifiedBold); 
    method_exchangeImplementations(originalBoldMethod, modifiedBoldMethod); 
} 
+1

안녕하세요 Matteodv !! 이것은 내 편이라는 위대한 작품 100+입니다. 너는 나에게 많은 시간과 노력을 똑같이 ..... ..... –

+0

애플의 가이드 라인에 들어 있니? 분명히 나를 도울 것입니다 ... –

+0

이 방법을 사용하여 iOS 7 용 응용 프로그램을 업데이트 한 이후로 Apple의 지침에 따라 허용되었지만 아무런 문제가 없었습니다. – matteodv