iOS) UISheetPresentationController dimming view alpha μμ ν΄λ³΄κΈ°(μ€ν¨)
π λ΄μ©
- 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 μ 컀μ€ν ν΄μΌνλ λ¬Έμ μμ μκ²λμμ΅λλ€.