iyOmSd/Title: Swift

[Swift] Font Custom ( 원하는 글자만 폰트적용하기 )

냄수 2020. 3. 1. 17:12
반응형

폰트를 설정 하는 방법에 대해서 알아볼게요

위에 글씨처럼 표현하려면 어떻게 해야하나요??

 

 

Label(가나다라) + Label(마바사)

.

.

.

이렇게 해도되긴하지만 오토레이아웃을 잡기가 까다로울수도있고

2개를 만들어야한다는것도 불편해요!!

 

 

String의 속성을 이용해서 원하는 위치의 글자의 폰트만 바꿔볼거에요!!

 

가나다라/마바사

저는 여기서 마바사의 폰트만 바꾸면 되겠죠

 

 

기본으로 적용할 폰트를 만들어줘요

let attributedString = NSMutableAttributedString(string: testLabel.text!, attributes: [
    .font: UIFont.systemFont(ofSize: 15, weight: .bold),
    .foregroundColor: UIColor(white: 0.0, alpha: 1.0),
    .kern: -0.01
]

아래에서 필요한 옵션들만 추가하면되요!!

font - 폰트를 적용해주고

foregroundColor - 글자색을 설정해주고

kern - 자간을 설정해줬어요

 

 

이제 기본폰트가아닌 특별하게 바꿀 부분의 폰트를 만들어줄거에요

attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 20, weight: .medium), range: (testLabel.text! as NSString).range(of: "마바사"))
attributedString.addAttribute(.foregroundColor, value: #colorLiteral(red: 0.2196078431, green: 0.1333333333, blue: 0.4862745098, alpha: 1), range: (testLabel.text! as NSString).range(of: "마바사"))
        
self.testLabel.attributedText = attributedString

addAttribute( 바꿀옵션, 값, 해당위치 )

에 맞게 넣어주고

해당위치는

 

바꾸려는 text를 NSString으로 변환후

range(of: )을 이용해서

해당 글자가 있는 위치를 추출해서 간편하게 쓸거에요

 

저같은 경우는 마바사를 바꿀거라서 "마바사"를 넣어줬어요

 

 

마지막으로 label의 속성에 적용해주면 끝이에요!!

 

 

 

아래는 전체코드에요

class ViewController: UIViewController {

    @IBOutlet weak var testLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()

	let attributedString = NSMutableAttributedString(string: testLabel.text!, attributes: [
          .font: UIFont.systemFont(ofSize: 15, weight: .bold),
          .foregroundColor: UIColor(white: 0.0, alpha: 1.0),
          .kern: -0.01
         ])
        
        attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 20, weight: .medium), range: (testLabel.text! as NSString).range(of: "마바사"))
        attributedString.addAttribute(.foregroundColor, value: #colorLiteral(red: 0.2196078431, green: 0.1333333333, blue: 0.4862745098, alpha: 1), range: (testLabel.text! as NSString).range(of: "마바사"))
        
        self.testLabel.attributedText = attributedString
    }
}

 

 

 

[TIP]

시스템 글꼴이 아니라 다른 글꼴일경우 간단하게 폰트를 관리 할 수 있어요

다른 더좋은 방법들도 많이있을거에요!!

참고해서 쓰세요ㅎㅎ..

 

 

우선 폰트가 스토리보드에 있는것과 표시되는 값이 다를수있어요

폰트이름부터 확인해봐야해요

 

for family: String in UIFont.familyNames
{
     print(“\(family)”)
     for names: String in UIFont.fontNames(forFamilyName: family)
     {
         print("== \(names)")
     }
}

 

정확한 이름을 확인후

아래처럼 관리해서 사용했어요

 

enum FontType {
    case regular, bold, medium, light, semibold
}

extension UIFont {
    static func fontWithName(type: FontType, size: CGFloat) -> UIFont {
        var fontName = ""
        switch type {
        case .regular:
            fontName = "AppleSDGothicNeo-Regular"
        case .light:
            fontName = "AppleSDGothicNeo-Light"
        case .medium:
            fontName = "AppleSDGothicNeo-Medium"
        case .semibold:
            fontName = "AppleSDGothicNeo-SemiBold"
        case .bold:
            fontName = "AppleSDGothicNeo-Bold"
        }
        
        return UIFont(name: fontName, size: size) ?? UIFont.systemFont(ofSize: size)
    }
}

 

 

 

 

 

 

 

 

반응형