반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함


Posted on

. Written by


수요일 FAQ 시간입니다. 코로나에서 custom fonts 를 사용하는것과 관련해서 자주 질문되는 것들입니다.

1. How do I load custom fonts?

어떻게 사용하는 platform 에 따라서 폰트들을 load 할 수 있나요?


iOS (iPhone, iPad)


iOS (아이폰, 아이패드) 는 build.settings 파일에 font 파일 이름을 추가하면 됩니다.


    iphone =
    {
        plist =
        {
            UIAppFonts =
            {
                "PTF55F.ttf",
                "AvenirLTStd-Black.otf",
                "SourceCodePro-Black.ttf"
            },
            UIApplicationExitsOnSuspend = true
        },
    }


폰트파일들은 resource 디렉토리에 있어야 합니다. 그래야지 iOS app bundle 로 compile 될 수 있습니다.


Mac


맥은 이 폰트들을 여러분의 시스템 안에 인스톨 해야 합니다. 폰트파일을 더블클릭하시면 Font Book app 이 그 폰트를 인스톨 할 겁니다. Mac 에서는 build.settings 파일에 추가할 것은 없습니다.


Android


폰트 파일이 resource 디렉토리에 있어야 합니다. 그래야 안드로이드 앱 bundle 로 컴파일 될 수 있습니다. 안드로이드에서는 build.settings file에 추가될 것은 없습니다.


Windows


윈도우에 custom font를 인스톨하는 것은 맥에서 인스톨하는 거랑 비슷합니다. 그 폰트를 사용하려면 시스템에 폰트를 인스톨 해야 합니다. 윈도우에서는 build.settings file에 추가될 것은 없습니다.



2. How do I use the custom fonts in my app?


Mac and iOS


맥과 iOS 에서 폰트를 사용하려면 폰트 이름을 명시해야 합니다. (파일이름이 아닙니다.) 해당 폰트의 이름이 무엇인지 알려주는 툴이 있을 겁니다. 제가 찾은 가장 쉬운 방법은 폰트를 load 하고 코로나에게 폰트 이름을 표시하도록 하는 겁니다. 시스템에 해당 폰트를 인스톨 했다면 맥 시뮬레이터에서 아래 코드를 실행해 보세요.


-- Code to have Corona display the font names found
--
local fonts = native.getFontNames()

count = 0

-- Count the number of total fonts
for i,fontname in ipairs(fonts) do
    count = count+1
end

print( "\rFont count = " .. count )

local name = "pt"     -- part of the Font name we are looking for

name = string.lower( name )

-- Display each font in the terminal console
for i, fontname in ipairs(fonts) do
    j, k = string.find( string.lower( fontname ), name )

    if( j ~= nil ) then

        print( "fontname = " .. tostring( fontname ) )
    
    end
end
---------------------------------------------------------


예를 들어 PTF55F는 “PTSerif-Regular” 가 될 겁니다. 바로 이 이름이 해당 폰트를 display 하고 싶을 때 명시해야 할 이름입니다.


CustFont = display.newText( "PTSerif-Regular", 40, 20, "PTSerif-Regular", 24 )

Android


안드로이드에서는 파일 이름이 폰트 이름입니다. (파일의 확장자를 제외한 이름이죠)


CustFont = display.newText( "PTSerif-Regular", 40, 20, "PTF55F", 24 )


안드로이드와 iOS 그리고 맥에서 같은 폰트 이름을 사용할 수 있는 팁이 있는데요. 폰트 파일 이름을 폰트 이름과 같이 하는 겁니다. 그려면 iOS/Mac 그리고 안드로이드에서 같은 이름을 사용할 수 있습니다.


Windows


The font name may be slightly different from Mac/iOS. In come cases spaces are inserted between words in the font name. In the PT Serif example, the font name is “PT Serif”. You can run the code snippet listed under the Mac and iOS section to get the exact name.

폰트 이름은 MAC/iOS 와는 약간 다릅니다. PT Serif 를 예를 들면 폰트 이름은 "PT Serif" 입니다.


CustFont = display.newText( "PTSerif-Regular", 40, 20, "PT Serif", 24 )


아래 예제는 각 플랫폼에 대해 폰트를 사용하는 예제입니다.


if "Win" == system.getInfo( "platformName" ) then PTSERIF = "PT Serif" elseif "Android" == system.getInfo( "platformName" ) then PTSERIF = "PTF55F" else -- Mac and iOS PTSERIF = "PTSerif-Regular" end CustFont = display.newText( "PTSerif-Regular", 40, 20, PTSERIF, 24 )


3. I’ve loaded the fonts but the fonts didn’t load. What’s wrong?


안드로이드와 윈도우즈에서는 폰트를 로드하지 못할 때는 터미널에 경고 메세지가 뜰겁니다.“WARNING: Could not load font xyz. Using default.”. iOS 와 맥에서는 로드를 하지 못했을 때 아무런 메세지도 뜨지 않습니다.

폰트를 로드하지 못하는 두가지 흔한 이유는 시스템이 로드되지 못한경우라던가 (윈도우나 맥) display.newText api에 잘못된 폰트 이름을 사용했을 경우 입니다. 윈도우와 관련해서 추가적으로 알아야할 것이 있는데 그 내용은 아래 질문 4에서 확인하세요.


4. Are OTF (Open Type Font) fonts supported in Corona?


OTF fonts는 맥과 iOS 에서 지원됩니다. 안드로이드는 build 984 후부터 지원하기 시작했습니다. 윈도우에서는 지원하지 않습니다. True Type Fonts (TTF) 는 모든 플랫폼에서 지원합니다.


5. What are the advantages of using Custom Fonts?


일단 custom font를 사용하면 더 이쁘거나 아니면 더 눈에 띄거나 앱에 더 잘 어울리거나 하겠죠. 그리고 또 다른 장점은 모든 플랫폼에서 text placement 의 일관성을 유지할 수 있습니다. 디폴트 폰트를 사용하면 각 플랫폼들마다 폰트가 다를수 있습니다. 그러면 폰트들 크기가 달라서 폰트들의 위치가 약간씩 다를 수 있습니다. custom font 를 사용하면 좀 더 쉽게 font placement 의 일관성을 지킬수가 있죠. 


여기까지가 오늘의 questions 입니다. 좋은 시간 되셨길 바랍니다.



반응형

Comment