๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS

[iOS] ์ปค์Šคํ…€ ํฐํŠธ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

by lizzydev 2023. 2. 16.

OS ๊ฐœ๋ฐœ์‹œ์— ๊ธฐ๋ณธ ๋‚ด์žฅ ํฐํŠธ ๋ง๊ณ  ์ปค์Šคํ…€ ํฐํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ์š”.

์˜ค๋Š˜์€ iOS UIKit ํ”„๋กœ์ ํŠธ์— ์ปค์Šคํ…€ ํฐํŠธ๋ฅผ ๋„ฃ์–ด ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์„ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

1. Font ํด๋” ๋งŒ๋“  ํ›„ ๊ทธ ์•ˆ์— ํฐํŠธํŒŒ์ผ ๋„ฃ๊ธฐ

๋จผ์ € ํ”„๋กœ์ ํŠธ์— ๋‹ค์šด๋ฐ›์€ ํฐํŠธ .otf๋‚˜ .ttf ํŒŒ์ผ์„ Xcode ํ”„๋กœ์ ํŠธ์— ๋Œ์–ด๋‹ค ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ์š”.

ํฐํŠธ๋ฅผ ํ•œ ํด๋”์— ๋„ฃ์–ด ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ €๋Š” Xcode ์™ผ์ชฝ ๋„ค๋น„๊ฒŒ์ด์…˜ ์˜์—ญ์—์„œ ํ”„๋กœ์ ํŠธ ํด๋” ๋ฐ‘์— Font ํด๋”๋ฅผ ์ƒ์„ฑ ํ•ด์ค€ ํ›„ ๊ทธ ์•ˆ์— ํฐํŠธ ํŒŒ์ผ์„ ๋Œ์–ด๋‹ค ๋„ฃ์–ด์คฌ์Šต๋‹ˆ๋‹ค.

 

 

2. Add to targets ์ฒดํฌํ•ด์ฃผ๊ธฐ

ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ์— ๋Œ์–ด๋‹ค ์ถ”๊ฐ€ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์€ ์ฐฝ์ด ๋œจ๋Š”๋ฐ Add to target์„ ์ฒดํฌํ•ด ์ค๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฒดํฌํ•ด์ฃผ์ง€์•Š์œผ๋ฉด ๋‚˜์ค‘์— ํฐํŠธ ํŒŒ์ผ๋งˆ๋‹ค ๋“ค์–ด๊ฐ€์„œ Target Membership ์ฒดํฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•ด์„œ ๋ฒˆ๊ฑฐ๋กœ์›Œ์š”.

Finish๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ž˜ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3. info.plist์— ํฐํŠธ๋ช… ์ถ”๊ฐ€ํ•˜๊ธฐ

๋จผ์ €, ์™ผ์ชฝ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ์˜์—ญ์—์„œ info.plist๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

 ๐Ÿ’ก info.plist๋ž€? (Information Property List)

์šฐ์„ , ํ”„๋กœํผํ‹ฐ ๋ฆฌ์ŠคํŠธ(property list)๋Š” iOS, NeXTSTEP ๋“ฑ์— ์ด์šฉ๋˜๋Š” ๊ฐ์ฒด ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. .plist๋ผ๋Š” ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
Info.plistํŒŒ์ผ์€ iOS์—์„œ์‹คํ–‰ ํŒจํ‚ค์ง€์— ๊ด€ํ•œ ํ•„์ˆ˜ ์„ค์ • ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์œ ๋‹ˆ์ฝ”๋“œ UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋˜๋ฉฐ ๋‚ด์šฉ์€ XML์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
root XML๋…ธ๋“œ๋Š” ํ‚ค, ๋ฐธ๋ฅ˜(Keys and Value)๋กœ ๊ตฌ์„ฑ๋œ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ์ด๋ฉฐ, ์‹œ์Šคํ…œ์€ ์ด ํ‚ค์™€ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ๊ณผ ์•ฑ์˜ ์„ค์ •์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ, ํ”„๋ ˆ์ž„์›Œํฌ, ์•ฑ์— Info.plist๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ๐Ÿ“ŽApple ๋ฌธ์„œ ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Key ํ•ญ๋ชฉ ์ค‘ Information Property List๋ฅผ ์„ ํƒํ•œํ›„ ์˜ค๋ฅธ์ชฝ + ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

Information Property List์˜ ํ”Œ๋Ÿฌ์Šค ๋ฒ„ํŠผ ๋ˆ„๋ฅธ ํ›„

Fonts provided by application ์ž…๋ ฅํ•˜๊ณ  ์„ ํƒํ•˜์—ฌ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Fonts provided by application ์˜†์˜ + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ถ”๊ฐ€ํ•œ ํฐํŠธํŒŒ์ผ๋งŒํผ item์„ ์ถ”๊ฐ€ํ•œํ›„ Value ๊ฐ’์„ ํฐํŠธ ํŒŒ์ผ๋ช…์œผ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค. ์ž˜๋ชป ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ์—๋Š” - ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์‚ญ์ œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋ช…์„ ์ž…๋ ฅ ํ•  ๋•Œ๋Š” .otf, .ttf ๋“ฑ์˜ ํ™•์žฅ์ž๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

4. ๊ฐ„ํŽธํ•˜๊ฒŒ UIFont์— ์ต์Šคํ…์…˜ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ

์ฝ”๋“œ๋กœ ๋ทฐ๋ฅผ ์งค ๋•Œ ํฐํŠธ๋ฅผ ์†์‰ฝ๊ฒŒ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด UIFont์— ์ต์Šคํ…์…˜์„ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋”์šฑ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

UIFont++.swift

import UIKit

//AppFontName์ด๋ผ๋Š” ์ด๋ฆ„์˜ struct๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ทธ ์•ˆ์— ๊ฐ ํฐํŠธํŒŒ์ผ๋ช…์„ ๊ฐ„๋‹จํ•œ ์ƒ์ˆ˜๋กœ ์„ ์–ธ
struct AppFontName {
    static let DINEng = "DINEngschriftStd"
    static let DINMittel = "DINMittelschriftStd"
    static let DINBdCond = "DINNeuzeitGroteskStd-BdCond"
    static let DINLight = "DINNeuzeitGroteskStd-Light"
    static let DINProblack = "DINPro-Black"
    static let DINProBold = "DINPro-Bold"
    static let DINProLight = "DINPro-Light"
    static let DINProMedium = "DINPro-Medium"
    static let DINProRegular = "DINPro-Regular"
    static let HanSansBold = "SpoqaHanSansNeo-Bold"
    static let HanSansLight = "SpoqaHanSansNeo-Light"
    static let HanSansMedium = "SpoqaHanSansNeo-Medium"
    static let HanSansRegular = "SpoqaHanSansNeo-Regular"
    static let HanSansThin = "SpoqaHanSansNeo-Thin"
}
extension UIFont{
    
		//์ธ์ž๋กœ size๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ํ•ด๋‹น size์˜ ๊ธ€๊ผด์˜ UIFont ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ
		//ํฐํŠธ๋ช…์„ ์ด์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ช… ์„ค์ •
   class func dinEngFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINEng, size: size)!
    }
    
    class func dinMittelFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINMittel, size: size)!
    }
    
    class func dinBdCondFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINBdCond, size: size)!
    }
    
    class func dinLightFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINLight, size: size)!
    }
    
    class func dinProBlackFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINProblack, size: size)!
    }
    
    class func dinProBoldFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINProBold, size: size)!
    }
    
    class func dinProLightFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINProLight, size: size)!
    }
    
    class func dinProMediumFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINProMedium, size: size)!
    }
    
    class func dinProRegularFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.DINProRegular, size: size)!
    }
    
    class func hanSansBoldFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.HanSansBold, size: size)!
    }
    
    class func hanSansLightFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.HanSansLight, size: size)!
    }
    
    class func hanSansMediumFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.HanSansMedium, size: size)!
    }
    
    class func hanSansRegularFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.HanSansRegular, size: size)!
    }
    
    class func hanSansThinFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.HanSansThin, size: size)!
    }
}

UIFont์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฐ”๋กœ UIFont์—์„œ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€ UIFont.hansSansBoldFont() ์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์คฌ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์˜ˆ์‹œ

๋‹ค์Œ๊ณผ ๊ฐ™์ด UIFont๋ฅผ ์นœ ํ›„ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์œผ๋กœ ์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์ด์ฆˆ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

//Snapkit๊ณผ Then ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ
private let titleLabel = UILabel().then{
        $0.text = "์•ฝ์† ์‹ ์ฒญ"
        $0.font = UIFont.hanSansBoldFont(ofSize: 18)
    }