animateKeyframes(withDuration:delay:options:animations:completion:) 🍎

YaR LabΒ·2023λ…„ 8μ›” 28일
0

iOS 🍎

λͺ©λ‘ 보기
19/26
post-thumbnail

1️⃣ μ •μ˜

ν˜„μž¬ 뷰에 λŒ€ν•œ ν‚€ν”„λ ˆμž„ 기반 μ• λ‹ˆλ©”μ΄μ…˜μ„ μ„€μ •ν•  수 μžˆλŠ” μ• λ‹ˆλ©”μ΄μ…˜ 블둝 객체λ₯Ό 생성

class func animateKeyframes(
    withDuration duration: TimeInterval,
    delay: TimeInterval,
    options: UIView.KeyframeAnimationOptions = [],
    animations: @escaping () -> Void,
    completion: ((Bool) -> Void)? = nil
)

2️⃣ μ„€λͺ…

  • 이 λ©”μ„œλ“œλŠ” ν‚€ν”„λ ˆμž„ 기반 μ• λ‹ˆλ©”μ΄μ…˜μ„ μ„€μ •ν•  수 μžˆλŠ” μ• λ‹ˆλ©”μ΄μ…˜ 블둝을 생성함

    ν‚€ν”„λ ˆμž„ 기반 μ• λ‹ˆλ©”μ΄μ…˜

    • μ• λ‹ˆλ©”μ΄μ…˜μ˜ μ‹œμž‘λΆ€ν„° λκΉŒμ§€ μ€‘μš”ν•œ ν”„λ ˆμž„(ν‚€ν”„λ ˆμž„)을 λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜μ—¬ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ œμ–΄ν•˜λŠ” 기술
    • 각 ν‚€ν”„λ ˆμž„μ—μ„œ λ·° λ˜λŠ” 객체의 속성(μœ„μΉ˜, 크기, νšŒμ „ λ“±)을 μ„€μ •ν•˜κ³ , μ‹œμŠ€ν…œμ€ μ΄λŸ¬ν•œ ν‚€ν”„λ ˆμž„ μ‚¬μ΄μ˜ 쀑간 ν”„λ ˆμž„μ„ μžλ™μœΌλ‘œ κ³„μ‚°ν•˜μ—¬ λΆ€λ“œλŸ¬μš΄ μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό 생성함
    • ν‚€ν”„λ ˆμž„(Keyframes): μ• λ‹ˆλ©”μ΄μ…˜μ˜ μ‹œμž‘κ³Ό 끝을 λ‚˜νƒ€λ‚΄λŠ” μ€‘μš”ν•œ μ‹œμ 
    • 보간(Interpolation): ν‚€ν”„λ ˆμž„ μ‚¬μ΄μ˜ 쀑간 ν”„λ ˆμž„μ€ μ‹œμŠ€ν…œμ΄ μžλ™μœΌλ‘œ κ³„μ‚°ν•˜μ—¬ 객체의 속성을 λΆ€λ“œλŸ½κ²Œ μ „ν™˜
    • μ‹œκ°„ μ œμ–΄(Time Control): 각 ν‚€ν”„λ ˆμž„μ€ μ• λ‹ˆλ©”μ΄μ…˜μ˜ 진행 μ‹œκ°„μ„ λ‚˜νƒ€λ‚΄λŠ” μ‹œκ°„κ°’κ³Ό 연결됨
    • 컀브 및 이징(Easing): ν‚€ν”„λ ˆμž„ κ°„μ˜ 보간에 μ‚¬μš©λ˜λŠ” 곑선을 μ‘°μ ˆν•˜μ—¬ μ• λ‹ˆλ©”μ΄μ…˜μ˜ 속도와 효과λ₯Ό μ‘°μ ˆν•¨
  • κ·ΈλŸ¬λ‚˜ ν‚€ν”„λ ˆμž„ μžμ²΄λŠ” 이 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄ˆκΈ°μ— μƒμ„±ν•œ μ• λ‹ˆλ©”μ΄μ…˜ λΈ”λ‘μ˜ 일뢀가 μ•„λ‹˜
  • μ• λ‹ˆλ©”μ΄μ…˜ 블둝 λ‚΄λΆ€μ—μ„œλŠ” addKeyframe(withRelativeStartTime:relativeDuration:animations:) λ©”μ„œλ“œλ₯Ό ν•œ 번 이상 ν˜ΈμΆœν•˜μ—¬ ν‚€ν”„λ ˆμž„ μ‹œκ°„κ³Ό μ• λ‹ˆλ©”μ΄μ…˜ 데이터λ₯Ό 좔가해야함
  • ν‚€ν”„λ ˆμž„μ„ μΆ”κ°€ν•˜λ©΄ μ‹œμŠ€ν…œμ€ μ§€μ •ν•œ μ‹œκ°„μ— 따라 ν˜„μž¬ λ·° κ°’μ—μ„œ 첫 번째 ν‚€ν”„λ ˆμž„μ˜ κ°’μœΌλ‘œ, λ‹€μŒ ν‚€ν”„λ ˆμž„μ˜ κ°’μœΌλ‘œ, 그리고 μ§€μ •ν•œ μ‹œκ°„μ— 따라 λ·°λ₯Ό μ• λ‹ˆλ©”μ΄μ…˜ν™”ν•¨
  • λ§Œμ•½ animations 블둝 λ‚΄μ—μ„œ μ–΄λ– ν•œ ν‚€ν”„λ ˆμž„λ„ μΆ”κ°€ν•˜μ§€ μ•ŠμœΌλ©΄, μ• λ‹ˆλ©”μ΄μ…˜μ€ ν‘œμ€€ μ• λ‹ˆλ©”μ΄μ…˜ λΈ”λ‘μ²˜λŸΌ μ‹œμž‘μ—μ„œ λκΉŒμ§€ 진행됨
  • λ‹€μ‹œ 말해, μ‹œμŠ€ν…œμ€ ν˜„μž¬ λ·° κ°’μ—μ„œ μƒˆ κ°’μœΌλ‘œ μ§€μ •λœ κΈ°κ°„ λ™μ•ˆ μ• λ‹ˆλ©”μ΄μ…˜ν™”ν•¨

πŸ“Œ Concurrency

  • 이 λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό 같이 μ„ μ–Έλœ 비동기 λ©”μ„œλ“œλ‘œ ν˜ΈμΆœν•  수 있음
class func animateKeyframes(
    withDuration duration: TimeInterval, 
    delay: TimeInterval, 
    options: UIView.KeyframeAnimationOptions = [], 
    animations: @escaping () -> Void
) async -> Bool
  • λ¬Όλ‘  이 νŽ˜μ΄μ§€μ—μ„œ λ³΄μ—¬μ£ΌλŠ” λŒ€λ‘œ μ™„λ£Œ ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν•˜μ—¬ 동기 μ½”λ“œμ—μ„œλ„ ν˜ΈμΆœν•  수 있음

πŸ“Œ Parameters

  • duration: 전체 μ• λ‹ˆλ©”μ΄μ…˜μ˜ 지속 μ‹œκ°„μœΌλ‘œ, 초 λ‹¨μœ„λ‘œ 츑정됨. 음수 κ°’μ΄λ‚˜ 0을 μ§€μ •ν•˜λ©΄ λ³€κ²½ 사항이 μ¦‰μ‹œ μ• λ‹ˆλ©”μ΄μ…˜ 없이 적용됨.
  • delay: μ• λ‹ˆλ©”μ΄μ…˜ μ‹œμž‘ 전에 λŒ€κΈ°ν•΄μ•Ό ν•˜λŠ” μ‹œκ°„(초 λ‹¨μœ„)을 지정함
  • options: μ–΄λ–»κ²Œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μˆ˜ν–‰ν• μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ˜΅μ…˜μ˜ 마슀크

    마슀크

    • μ—¬λŸ¬ μ˜΅μ…˜ λ˜λŠ” μƒνƒœλ₯Ό μ‘°ν•©ν•˜κ±°λ‚˜ μ„€μ •ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λΉ„νŠΈ νŒ¨ν„΄
  • animations: 뷰에 컀밋할 λ³€κ²½ 사항을 ν¬ν•¨ν•˜λŠ” 블둝 객체. 일반적으둜 이 블둝 λ‚΄μ—μ„œ addKeyframe(withRelativeStartTime:relativeDuration:animations:) λ©”μ„œλ“œλ₯Ό ν•œ 번 이상 ν˜ΈμΆœν•¨. λ˜ν•œ, λ³€κ²½ 사항이 전체 κΈ°κ°„ λ™μ•ˆ μ• λ‹ˆλ©”μ΄μ…˜ν™”λ˜κΈ°λ₯Ό μ›ν•˜λŠ” 경우 λ·° κ°’ 자체λ₯Ό 직접 λ³€κ²½ν•  μˆ˜λ„ 있음. 이 블둝은 λ§€κ°œλ³€μˆ˜λ₯Ό 받지 μ•ŠμœΌλ©° λ°˜ν™˜ 값을 갖지 μ•Šμ•„μ•Ό 함. 이 λ§€κ°œλ³€μˆ˜μ—λŠ” nil 값을 μ‚¬μš©ν•˜λ©΄ μ•ˆλ¨
  • completion: μ• λ‹ˆλ©”μ΄μ…˜ μ‹œν€€μŠ€κ°€ μ’…λ£Œλ  λ•Œ μ‹€ν–‰ν•  블둝 객체. 이 블둝은 λ°˜ν™˜ 값을 갖지 μ•ŠμœΌλ©°, μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ™„λ£Œλ˜μ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 단일 Bool 인수λ₯Ό λ°›μŒ. μ• λ‹ˆλ©”μ΄μ…˜μ˜ 지속 μ‹œκ°„μ΄ 0인 경우, 이 블둝은 λ‹€μŒ μ‹€ν–‰ 루프 주기의 μ‹œμž‘ μ‹œμ— 싀행됨 이 λ§€κ°œλ³€μˆ˜μ—λŠ” nil 값을 μ‚¬μš©ν•  수 있음

πŸ“Œ options

  • UIView.KeyframeAnimationOptions
  • ν‚€ν”„λ ˆμž„ 기반 μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” μ˜΅μ…˜λ“€

μΆœμ²˜πŸ“š

🍎Apple Docs: animateKeyframes(withDuration:delay:options:animations:completion:)
🍎Apple Docs: UIView.KeyframeAnimationOptions

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보