TIL - UITabBarController에서 Gradient Background 적용하기

jeongmuyamette·2025년 1월 15일

TIL

목록 보기
27/72
post-thumbnail

📝 학습 내용

오늘은 UITabBarController에 그라데이션 배경을 적용하는 방법에 대해 알아보았습니다.

💡 주요 포인트

  1. CAGradientLayer를 사용하여 그라데이션 효과 구현
  2. UITabBar의 배경을 커스터마이징하는 방법
  3. 색상 관리를 위한 extension 활용

📚 상세 내용

1. CAGradientLayer 설정

let gradientLayer = CAGradientLayer()
gradientLayer.frame = tabBar.bounds
gradientLayer.colors = [
    UIColor(hex: "#4A90E2").cgColor,
    UIColor(hex: "#50E3C2").cgColor
]
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 1, y: 0)

2. UIColor Extension으로 HEX 색상 지원

extension UIColor {
    convenience init(hex: String) {
        let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        var int = UInt64()
        Scanner(string: hex).scanHexInt64(&int)
        let a, r, g, b: UInt64
        switch hex.count {
        case 3:
            (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6:
            (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
        case 8:
            (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            (a, r, g, b) = (255, 0, 0, 0)
        }
        self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
    }
}

3. TabBar에 그라데이션 적용

func setupTabBarGradient() {
    let gradientImage = createGradientImage(for: tabBar)
    tabBar.backgroundImage = gradientImage
    tabBar.shadowImage = UIImage()
}

func createGradientImage(for view: UIView) -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
    guard let context = UIGraphicsGetCurrentContext() else { return nil }
    
    gradientLayer.render(in: context)
    let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    
    return gradientImage
}

🔍 실제 적용

  • ViewController에서 viewDidLoad() 시점에 적용
  • 화면 회전이나 크기 변경 시 재적용 필요

⚠️ 주의사항

  1. 그라데이션 레이어는 view의 bounds가 변경될 때마다 업데이트 필요
  2. iOS 버전별로 동작이 다를 수 있으므로 테스트 필요
  3. 메모리 관리를 위해 적절한 시점에 리소스 해제 필요

📌 참고사항

  • iOS 13 이상에서는 UITabBar appearance를 통한 설정도 가능
  • 다크모드 대응 시 색상 설정에 주의

0개의 댓글