2014-02-06 3 views
8

애플은 기간과 콜론을 반올림 한 헬 베티 얇은/빛의 특별한 수정 된 버전을 만들어iOS 7의 수정 된 Helvetica를 앱에서 사용할 수 있습니까?</p> <p><img src="https://i.stack.imgur.com/epRsQ.png" alt="enter image description here"></p> <p>은 엑스 코드에서 헬 베티 - 뉴 얇은 또는 헬 베티 - 뉴 라이트를 사용하여이 비교 : 아이폰 OS 7의

enter image description here

는 둥근 콜론과 기간에 특별한 수정 된 버전으로 애플 리케이션을 개발 할 수 있습니까?

EDIT :이 둥근 콜론과 마침표는 Apple에서 설계 한 것이 아니며 "문자 번갈림"이며 원하는 글꼴 글자 뷰어에서 볼 수 있습니다.

+0

당신은 아래를로드하고 사용자 정의 글꼴로 사용할 수 있습니까? –

+0

아마도, 어디서부터? – inorganik

답변

11

다음은 수행 방법입니다. 설명서를 읽었을지라도 매우 불분명합니다.

먼저 글꼴의 특성을 얻어야합니다.이 글꼴은 UIFontDescriptorFeatureSettingsAttribute에서 사용할 상수를 제공합니다. 나는 this post에서 내 것을 얻었다.

이렇게하면 기능 유형 식별자 키와 그 값에 대한 옵션 인 기능 선택기 식별자 키가 제공됩니다.

NSArray *timerDisplaySettings = @[ 
             @{ UIFontFeatureTypeIdentifierKey: @(6), 
             UIFontFeatureSelectorIdentifierKey: @(1) 
            }, 
             @{ UIFontFeatureTypeIdentifierKey: @(17), 
             UIFontFeatureSelectorIdentifierKey: @(1) 
             }]; 

는 당신이 설명에 추가하여 글꼴 설명을 만들 - 당신이 UIFont을 통해 글꼴 이름과 가족을 지정할 수있는이 방법 : 다음

UIFont *font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:32]; 

UIFontDescriptor *originalDescriptor = [font fontDescriptor]; 
UIFontDescriptor *timerDescriptor =[originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorFeatureSettingsAttribute: timerDisplaySettings }]; 

을 루프를 닫고로 글꼴을 만들려면 설명자. (크기 "0.0"단순히 우리가 글꼴 배열 기능을보고, 미래의 독자를 위해서 (32)

UIFont *timerFont = [UIFont fontWithDescriptor: timerDescriptor size:0.0]; 
0

예, 이러한 기능은 iOS 7의 새로운 동적 유형 시스템을 통해 액세스 할 수 있습니다. http://tirania.org/monomac/archive/2013/Sep-25.html

+1

글꼴의 렌더링을 사용자 정의하는 방법을 보여주는 링크 부분은 유료 프레임 워크 (MonoTouch)에 의존하고 객관적인 -C 코드가없는 github의 저장소를 나타냅니다. 답안에 실제 객관적인 C 코드를 제공해주십시오. – inorganik

4

의 원래 크기에서 그것을 확장하지 않는 의미, 목표 - C에서입니다

@import CoreText; 

HelveticaNeue-UltraLight 들어

- (void)fontFeatures:(UIFont *)font { 
    NSArray *features = CFBridgingRelease(CTFontCopyFeatures((__bridge CTFontRef)font)); 

    if (features) { 
     NSLog(@"%@: %@", font.fontName, features); 
    } 
} 

그 수율 :

HelveticaNeue-UltraLight: (
     { 
     CTFeatureTypeIdentifier = 1; 
     CTFeatureTypeName = Ligatures; 
     CTFeatureTypeNameID = 258; 
     CTFeatureTypeSelectors =   (
         { 
       CTFeatureSelectorDefault = 1; 
       CTFeatureSelectorIdentifier = 2; 
       CTFeatureSelectorName = "Common Ligatures"; 
       CTFeatureSelectorNameID = 259; 
      } 
     ); 
    }, 
     { 
     CTFeatureTypeExclusive = 1; 
     CTFeatureTypeIdentifier = 6; 
     CTFeatureTypeName = "Number Spacing"; 
     CTFeatureTypeNameID = 262; 
     CTFeatureTypeSelectors =   (
         { 
       CTFeatureSelectorDefault = 1; 
       CTFeatureSelectorIdentifier = 0; 
       CTFeatureSelectorName = "No Change"; 
       CTFeatureSelectorNameID = 264; 
      }, 
         { 
       CTFeatureSelectorIdentifier = 1; 
       CTFeatureSelectorName = "Proportional Numbers"; 
       CTFeatureSelectorNameID = 263; 
      } 
     ); 
    }, 
     { 
     CTFeatureTypeExclusive = 1; 
     CTFeatureTypeIdentifier = 17; 
     CTFeatureTypeName = "Character Alternatives"; 
     CTFeatureTypeNameID = 265; 
     CTFeatureTypeSelectors =   (
         { 
       CTFeatureSelectorDefault = 1; 
       CTFeatureSelectorIdentifier = 0; 
       CTFeatureSelectorName = "No Change"; 
       CTFeatureSelectorNameID = 264; 
      }, 
         { 
       CTFeatureSelectorIdentifier = 1; 
       CTFeatureSelectorName = "Time Punctuation"; 
       CTFeatureSelectorNameID = 266; 
      }, 
         { 
       CTFeatureSelectorIdentifier = 2; 
       CTFeatureSelectorName = "Compass Punctuation"; 
       CTFeatureSelectorNameID = 267; 
      }, 
         { 
       CTFeatureSelectorIdentifier = 3; 
       CTFeatureSelectorName = "Weather Punctuation"; 
       CTFeatureSelectorNameID = 268; 
      }, 
         { 
       CTFeatureSelectorIdentifier = 4; 
       CTFeatureSelectorName = "Round Lowercase Punctuation"; 
       CTFeatureSelectorNameID = 269; 
      } 
     ); 
    } 
) 
,174,

따라서 iOS 8에서 HelveticaNeue-UltraLight의 경우 키 17은 "Character Alternatives"이고 값 1은 "Time Punctuation"입니다.


스위프트에서 이러한 기능을 확인하려면, 그것은이다

import CoreText 

func fontFeatures(font: UIFont) { 
    if let features = CTFontCopyFeatures(font) as NSArray! { 
     println("\(font.fontName): \(features)") 
    } 
}