ํฐ์คํ ๋ฆฌ ๋ทฐ
iOS) UISheetPresentationController dimming view alpha ์์ ํด๋ณด๊ธฐ(์คํจ)
hyun99999 2023. 10. 10. 17:39๐ ๋ด์ฉ
- dimming view ์ alpha ๊ฐ์ ์์ ํด๋ณด๊ฒ ์ต๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก alpha ๊ฐ์ ์ํ๋๋๋ก ์์ ํ์ง ๋ชปํ๊ณ , ๋ทฐ ๊ณ์ธต์ ์ ๊ทผ๋ฐฉ๋ฒ๊ณผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ๋ฏผํ ๊ณผ์ ์ ๊ธ๋ก์จ ์์ฑํ์์ต๋๋ค.
๐ dimming view alpha ์์
์ฐ์ , ๊ฐ๋ฐ์ ๋ฌธ์์์๋ alpha ์ ๋ํ ์๋ด๊ฐ ์๊ธฐ ๋๋ฌธ์ view ์ ์ ๊ทผํด์ ํ๋กํผํฐ๋ฅผ ์์ ํด๋ณด๊ธฐ ์ํด view hierarchy ๋ฅผ ํ์ธํด๋ณด์์ต๋๋ค.
view hierarchy ๋ฅผ ํ์ธํด๋ณด๋ฉด background alpha ๊ธฐ๋ณธ๊ฐ์ 0.2 ๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ด๋ฅผ ์์ ํด๋ณด๊ฒ ์ต๋๋ค.
UIDimmingView ์ ์ ๊ทผํ๊ธฐ ์ํด์
UIWindowScene > UIWindow > UITransitionView > UIDimmingView ์ธ ๊ฒ์ ์์์ผ ํฉ๋๋ค.
๋ค์์ ์ฝ๋๋ก ์ ๊ทผํด์ ์์ฑ์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
// โ
UIWindowScene > UIWindow > UITransitionView > UIDimmingView
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
let windows = windowScene?.windows.first?.subviews
print(windows)
// Optional([<UITransitionView: 0x117f1b160; frame = (0 0; 393 852); autoresize = W+H; layer = <CALayer: 0x600000278560>>, <UITransitionView: 0x117f33140; frame = (0 0; 393 852); autoresize = W+H; layer = <CALayer: 0x6000002d2d40>>, <UITransitionView: 0x11748eed0; frame = (0 0; 393 852); autoresize = W+H; layer = <CALayer: 0x600000334b00>>])
view hierachy ์ ํ์๋ ๋๋ก ์ธ ๊ฐ์ UITransitionView ์ค ๋ง์ง๋ง์ UIDimmingView ์ ์ ๊ทผํด๋ณด๊ฒ ์ต๋๋ค.
// โ
UIWindowScene > UIWindow > UITransitionView > UIDimmingView
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
let transitionView = windowScene?.windows.first?.subviews[2]
let dimmingView = transitionView?.subviews[0]
dimmingView?.alpha = 0.8
print(transitionView?.subviews)
// Optional([<UIDimmingView: 0x11ad97b60; frame = (-393 -852; 1179 2556); alpha = 0.8; opaque = NO; gestureRecognizers = <NSArray: 0x600000ecf840>; backgroundColor = UIExtendedSRGBColorSpace 0 0 0 0.2; layer = <CALayer: 0x60000031b8a0>>, <UIDropShadowView: 0x11ada0260; frame = (0 548; 393 304); gestureRecognizers = <NSArray: 0x600000e8c270>; layer = <CALayer: 0x600000336200>>])
UIDimmingView ์ ์ ๊ทผํ ์ ์๊ฒ ๋์์ต๋๋ค!
๋ค์๊ณผ ๊ฐ์ด view ์์ฒด๋ฅผ 0.8 ๋ก ์ค์ ํ์์ต๋๋ค. ๊ทธ๋ฌ๋ background ์ alpha ๊ฐ์ด 0.2์ด๊ธฐ ๋๋ฌธ์ ์๋ํ UI ๊ฐ ์๋์ง๋ง ์์ ๋์์ต๋๋ค!
์ด๋ฒ์๋ background ์์์ ๊ฒ์ ์์ alpha ๊ฐ์ 0.4 ์ฃผ์ด์ ์์ ํ์ฌ ์๋ํ UI ๊ฐ ์์ฑ๋๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
let transitionView = windowScene?.windows.first?.subviews[2]
let dimmingView = transitionView?.subviews[0]
dimmingView?.backgroundColor = .black.withAlphaComponent(0.4)
ํ์ง๋ง, ์ด๋ฐ์์ ์ ๊ทผ์ ์ํด์๋ viewDidLoad ์์ ํธ์ถํ ์ ์์ต๋๋ค. ํด๋น ๋ผ์ดํ ์ฌ์ดํด๊น์ง๋ ๋น์ฐํ ๋ทฐ๊ฐ ์์ง ๊ทธ๋ ค์ง๊ธฐ ์ ์ด๋ UITransitionView ๊ฐ ๋ ๊ฐ๋ง ์์ต๋๋ค.
๊ทธ๋์ viewWillAppear ๋จ๊ณ ์ดํ๋ถํฐ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃจ๊ณ ์ํ๋ UITransitionView ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
ํด๋น ๋ผ์ดํ ์ฌ์ดํด์์ alpha ๊ฐ์ ์กฐ์ ํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ถ์์ฐ์ค๋ฝ๊ฒ UI ๊ฐ ๋ณํ ์ ๋ฐ์ ์์์ต๋๋ค.
๐จ ํธ๋ฌ๋ธ ์ํ
์์ง ๋ง๋ค์ด์ง์ง ์์ ๋ทฐ๊ฐ ์ด๋ ๊ฒ ๋ทฐ ๊ณ์ธต์ ๊ฐ์ง ๊ฒ์ด๋ค ๋ผ๋ ์ ์ ๋ฅผ ๊ฐ์ง๊ณ ๋ทฐ์ ์ ๊ทผํด๋ณด์์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ํน์ ๋ผ์ดํ ์ฌ์ดํด ์ดํ์ ๋ทฐ์ ์ ๊ทผํ ์ ์์๊ณ , ๋ถ์์ฐ์ค๋ฝ๊ฒ UI ๊ฐ ๊ทธ๋ ค์ง๋ ๊ฒ์ ์ด๋ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋จํ์ต๋๋ค. ๐ญ
๐ ์ ๊ทผ
UITransitionView ๋ฅผ ๋ณด๋ present() ๋ฉ์๋๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ๋ณด์ฌ์ค ๋ UISheetPresentationController ์ค์ ์์ด๋ ์๋์ ๊ฐ์ด ๋ค์ ํ๋ฉด์ ๋์ด์ค ๋๋ dimming view ๊ฐ ์๋ ๊ฒ์ด ์๊ฐ๋ฌ์ต๋๋ค.
nextViewController.modalPresentationStyle = .pageSheet
์ญ์๋ ๋์ผํ UIDimmingView ์์ต๋๋ค.
๋ฌธ์ ์ ๊ด์ ์ ๋ฐ๊พธ์ด์ modalPresentationStyle.pageSheet ์ผ ๋ dimming view ์ alpha ๊ฐ์ ๋ณ๊ฒฝํด์ผํ๋ ๋ฌธ์ ์์ ์๊ฒ๋์์ต๋๋ค.
์ด๋ ๋์ด์ UISheetPresentationController ์ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ์๋ UIPresentationController ํด๋์ค๋ฅผ ์์๋ฐ์ presentationController ์ ์ปค์คํ ํด์ผํ๋ ๋ฌธ์ ์์ ์๊ฒ๋์์ต๋๋ค.
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- UserDefaults
- MVVM
- MOYA
- watchOS
- WWDC
- configurable widget
- Protocol
- APNS
- Swift
- rxswift
- YPImagePicker
- WWDC22
- SwiftUI
- OpenSourceLibrary
- Widget
- async/await
- Notification
- Algorithm
- Objective-C
- RxCocoa
- urlsession
- WidgetKit
- 2022 KAKAO TECH INTERNSHIP
- CloneCoding
- IOS
- ์๋ฒํต์
- containerBackground
- github
- projectsetting
- Firebase
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- Total
- Today
- Yesterday