Skip to content

hero animation

tyler edited this page Oct 10, 2023 · 5 revisions

Hero Animation

  • μΉ΄λ“œλ₯Ό ν΄λ¦­μ‹œ μΉ΄λ“œκ°€ ν™•λŒ€λ˜λ©° 창으둜 μ „ν™˜λ©λ‹ˆλ‹€.

λͺ©μ°¨

1. κ°œμš”
2. matchedGeometryEffect
3. μ‚¬μš©ν•œ λ³€μˆ˜
4. μ‚¬μš©ν•œ μƒμˆ˜
5. μŠ€ν¬λ¦°μƒ·

κ°œμš”

  • matchedGeometryEffect μ‚¬μš©
  • x λ²„νŠΌμ„ 눌러 dismiss κ°€λŠ₯
  • drag, scroll λ‘œλ„ dismiss κ°€ κ°€λŠ₯함

matchedGeometryEffect

  • namespace 둜 μ• λ‹ˆλ©”μ΄μ…˜μ„ μ›ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ“€μ„ λ§€μΉ˜μ‹œν‚΅λ‹ˆλ‹€.
  • isShow 둜 μΉ΄λ“œλ·°μ™€ 창의 λ‚˜νƒ€λ‚¨μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
    @Namespace var namespace
    @State private var isShow = false

μ‚¬μš©ν•œ λ³€μˆ˜

  • viewSize : λ“œλž˜κ·Έλ‚˜ 슀크둀 μ‹œ λ·°κ°€ μž‘μ•„μ§ˆλ•Œ μ‚¬μš©
  • scrollViewOffset : 슀크둀 offset 좔적
  • dragState : λ“œλž˜κ·Έ μ‹œ width λ‚˜ height 좔적
    @State private var viewSize = 0.0
    @State private var scrollViewOffset: CGFloat = 0
    @State private var dragState: CGSize = .zero

μ‚¬μš©ν•œ μƒμˆ˜

  • fadeInOffset : λ·°κ°€ λ‚˜νƒ€λ‚ λ•Œ μ•½κ°„μ˜ μ• λ‹ˆλ©”μ΄μ…˜(10 정도 μœ„λ‘œ μ˜¬λΌκ°‘λ‹ˆλ‹€)
  • dragStartRange : μ–‘μͺ½ λμ—μ„œ 60 λ²”μœ„μ—μ„œλ§Œ λ“œλž˜κ·Έν•˜μ—¬ dismiss κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • scrollStartRange : μ΅œμ†Œ μœ„μ—μ„œ 5 이상 내리기 μ‹œμž‘ν•΄μ•Ό dismiss μΈν„°λ ‰μ…˜μ΄ κ΅¬ν˜„λ©λ‹ˆλ‹€.
  • dragLimit, scrollLimit : μ„€μ •ν•œ Limit 보닀 더 λ“œλž˜κ·Έ ν•˜κ±°λ‚˜ 슀크둀 ν•΄μ•Ό dismiss κ°€ λ©λ‹ˆλ‹€.
    private let fadeInOffset: CGFloat = 10
    private let dragStartRange: CGFloat = 60
    private let scrollStartRange: CGFloat = 5
    private let dragLimit: CGFloat = 60
    private let scrollLimit: CGFloat = 40

μŠ€ν¬λ¦°μƒ·

κΈ°λŠ₯ μŠ€ν¬λ¦°μƒ·
νžˆμ–΄λ‘œ μ• λ‹ˆλ©”μ΄μ…˜
X λ²„νŠΌ 클릭 μ‹œ Dismiss
μ•„λž˜λ‘œ 슀크둀 μ‹œ Dismiss
λ“œλž˜κ·Έ μ‹œ Dismiss

Clone this wiki locally