Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 애니메이션
- UITextView
- uitableview
- rxswift
- 리펙터링
- tableView
- Xcode
- combine
- SWIFT
- RxCocoa
- ios
- collectionview
- Protocol
- Human interface guide
- HIG
- map
- ribs
- 스위프트
- Clean Code
- 리팩토링
- UICollectionView
- swiftUI
- 리펙토링
- uiscrollview
- swift documentation
- Observable
- clean architecture
- Refactoring
- MVVM
- 클린 코드
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] NavigationBar에 blur 효과 적용하는 방법 (UIBlurEffect, UIVisualEffectView, isTranslucent, 네비게이션 바 블러 효과) 본문
iOS 응용 (swift)
[iOS - swift] NavigationBar에 blur 효과 적용하는 방법 (UIBlurEffect, UIVisualEffectView, isTranslucent, 네비게이션 바 블러 효과)
jake-kim 2024. 9. 18. 01:25네비게이션 블러 효과
- 구현 아이디어
- 먼저 navigationBar를 투명하게하고(isTranslucent = true), 색상을 clear로 설정
- 네비게이션바에 addSubview하여 blur 뷰를 삽입
- blur뷰는 UIBlurEffect와 UIVisualEffectView를 사용하면 편하게 블러효과를 줄 수 있음
구현 방법
- 먼저 navigationBar를 투명하게하고(isTranslucent = true), 색상을 clear로 설정
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: UIBarMetrics.default)
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().isTranslucent = true
UINavigationBar.appearance().tintColor = .clear
UINavigationBar.appearance().backgroundColor = .clear
- navigationBar가 생성되는 viewDidAppear에서 블러 뷰를 세팅
package override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
title = "네비게이션 바 블러효과"
setupBlurEffectToTopView()
}
- 중복으로 세팅되면 안되므로 변수 선언
var blurView: UIView?
- UIBlurEffect의 스타일을 설정한 후, UIVisualEffectView 인스턴스 생성
func setupBlurEffectToTopView() {
guard blurView == nil else { return }
let blurEffect = UIBlurEffect(style: .light)
let blurView = UIVisualEffectView(effect: blurEffect)
self.blurView = blurView
}
- 이 blurView의 높이는 navigationBar height에다가 상단 safeArea height를 고려한 값이므로 이 값으로 blurView의 height를 지정하여 사용
func setupBlurEffectToTopView() {
guard blurView == nil else { return }
let blurEffect = UIBlurEffect(style: .light)
let blurView = UIVisualEffectView(effect: blurEffect)
self.blurView = blurView
let navigationBarBounds = navigationController?.navigationBar.bounds ?? .zero
let window = UIApplication.shared.windows.first
let safeAreaHeight = window?.safeAreaInsets.top ?? 0
blurView.frame = .init(x: 0, y: 0, width: navigationBarBounds.width, height: navigationBarBounds.height + safeAreaHeight)
blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurView)
}
완성)
* 전체 코드: https://github.com/JK0369/ExNavigationBarBlurEffect
'iOS 응용 (swift)' 카테고리의 다른 글
Comments