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
- Human interface guide
- rxswift
- HIG
- UICollectionView
- Refactoring
- tableView
- 리팩토링
- 애니메이션
- swift documentation
- 리펙토링
- 클린 코드
- uitableview
- map
- Protocol
- UITextView
- combine
- 리펙터링
- Clean Code
- collectionview
- RxCocoa
- ios
- 스위프트
- MVVM
- ribs
- Xcode
- swiftUI
- Observable
- clean architecture
- uiscrollview
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 블러 효과, 색상 필터링 효과 주는 방법 (UIVisualEffectView, UIBlurEffect, UIVibrancyEffect) 본문
iOS 응용 (swift)
[iOS - swift] 블러 효과, 색상 필터링 효과 주는 방법 (UIVisualEffectView, UIBlurEffect, UIVibrancyEffect)
jake-kim 2023. 9. 18. 01:16UIVisualEffectView 개념
- 블러 효과나 뷰에 생동감을 구현하는 뷰
- UIVisualEffectView를 aView에 addSubview하게되면, aView에 효과가 적용되는 원리
- ex) 블러효과 UIVisualEffectView를 aView에 addSubview하면 aView에 블러효과가 적용
블러 효과 UIBlurEffect
- 예제 코드)
class ViewController: UIViewController {
let backgroundImageView = {
let backgroundImageView = UIImageView(image: UIImage(systemName: "circle.fill"))
backgroundImageView.contentMode = .scaleAspectFill
return backgroundImageView
}()
let label = {
let titleLabel = UILabel()
titleLabel.text = "iOS 앱 개발 알아가기 Blur 효과"
titleLabel.textColor = .black
titleLabel.font = UIFont.boldSystemFont(ofSize: 24)
titleLabel.sizeToFit()
return titleLabel
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(backgroundImageView)
backgroundImageView.frame = view.bounds
setLightBlur(blurEffect: .light)
}
private func setLightBlur(blurEffect: UIBlurEffect.Style) {
// TODO:
}
}
- UIVisualEffectView를 만든 후 UIBlurEffect 프로퍼티를 주입해주고 이 뷰를 backgroundImageView에 addSubview하여 블러효과 적용
setLightBlur(blurEffect: .light)
private func setLightBlur(blurEffect: UIBlurEffect.Style) {
let blurEffect = UIBlurEffect(style: blurEffect)
let effectView = UIVisualEffectView(effect: blurEffect)
effectView.frame = view.bounds
backgroundImageView.addSubview(effectView)
effectView.contentView.addSubview(label)
label.center = view.center
}
- 블러 스타일 UIBlurEffect.Style
- UIBlurEffect.Style 타입이 존재
let blurEffect = UIBlurEffect(style: .light) // <-
let effectView = UIVisualEffectView(effect: blurEffect)
UIBlurEffect 스타일
- 크게 4가지로 분류: Adatpable / Light / Dark / Addtional
- Adatpable: 네이밍이 -Material 로 끝나는 것들
- 주로 밝은 배경에 사용
- 텍스트와 같은 내용을 강조하는 데 적합
- 뒷 배경이 모호하게 흐릿하게 표시
- Light
- 어두운 배경에 사용
- 주로 밝은 텍스트를 포함하는 뷰 위에 적용하여 텍스트의 가독성을 높이기 위해 사용
- 뒷 배경이 어둡게 흐릿하게 표시
- Dark
- 밝은 배경에 사용
- 다른 요소와 대비를 높이는 데 사용
- 뒷 배경이 가장 밝고 흐릿하게 표시
- Additional
- 객체의 주변을 강조하려는 경우에 사용
- 객체 주변에 더 강력한 블러 효과를 생성하여 객체를 부각시키는 효과
컬러 효과 UIVibrancyEffect
- 검정색의 UILabel 폰트 색상을 뒷 배경의 blur와 연관지어 색상을 변경되도록 하는 효과
- 폰트 색상에 영향받지 않고 오직 뒷 배경의 색상에 영향이 받으로 폰트 색상이 black이건, blue이건 영향 x
- UIVisualEffectView의 blurEffect 값에 UIVibrancyEffect인스턴스를 주입해주면 구현 완료
setColorEffect(blurEffectStyle: .dark)
private func setColorEffect(blurEffectStyle: UIBlurEffect.Style) {
let blurEffect = UIBlurEffect(style: blurEffectStyle)
let colorEffect = UIVibrancyEffect(blurEffect: blurEffect)
let effectView = UIVisualEffectView(effect: colorEffect)
effectView.frame = view.bounds
backgroundImageView.addSubview(effectView)
effectView.contentView.addSubview(label)
label.center = view.center
}
- 뒷 배경을 흐리게 만들고, 컬러 효과까지 사용하면 UILabel이 더욱 부각시킬 수 있는 효과
setLightBlur(blurEffectStyle: .light)
setColorEffect(blurEffectStyle: .dark)
private func setLightBlur(blurEffectStyle: UIBlurEffect.Style) {
let blurEffect = UIBlurEffect(style: blurEffectStyle)
let effectView = UIVisualEffectView(effect: blurEffect)
effectView.frame = view.bounds
backgroundImageView.addSubview(effectView)
effectView.contentView.addSubview(label)
label.center = view.center
}
private func setColorEffect(blurEffectStyle: UIBlurEffect.Style) {
let blurEffect = UIBlurEffect(style: blurEffectStyle)
let colorEffect = UIVibrancyEffect(blurEffect: blurEffect)
let effectView = UIVisualEffectView(effect: colorEffect)
effectView.frame = view.bounds
backgroundImageView.addSubview(effectView)
effectView.contentView.addSubview(label)
label.center = view.center
}
* 전체 코드: https://github.com/JK0369/ExUIVisualEffectView
* 참고
https://developer.apple.com/documentation/uikit/uiblureffect/style#3234054
https://developer.apple.com/documentation/uikit/uivisualeffectview
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] 심볼 애니메이션 (iOS 17, isSymbolAnimationEnabled) (2) | 2023.09.20 |
---|---|
[iOS - swift] 1. 붙여넣기 글자 제한 UITextView 처리, 커서 이동 처리 방법 - 단순 텍스트 (0) | 2023.09.19 |
[iOS - swift] NSAttributedString vs AttributedString 개념 (1) | 2023.09.17 |
[iOS - swift] 숫자로 이루어진 문자열인지 판별하는 방법 (CharacterSet, regularExpression, +benchmark) (0) | 2023.09.15 |
[iOS - swift] Memory Leak 쉽게 테스트하는 방법 (Symbolic Breakpoint) (19) | 2023.09.13 |
Comments