본문 바로가기
개발/Swift

Swift에서 CADisplayLink를 사용하는 방법

by Wrmoon 2023. 7. 24.
반응형

Swift 사진

Swift에서 CADisplayLink를 사용하는 방법

안녕하세요! 이번 블로그에서는 Swift에서 CADisplayLink를 사용하는 방법에 대해 알아보겠습니다. CADisplayLink는 애니메이션을 생성하고 업데이트하는 데 사용되는 매우 유용한 클래스입니다. 이제 한 단계씩 따라가면서 CADisplayLink를 활용하는 방법을 알아보도록 하겠습니다.

1. CADisplayLink 이해하기

CADisplayLink는 매 프레임마다 특정 타겟 객체의 지정된 셀렉터를 호출하는 매커니즘을 제공합니다. 기기의 화면 주사율과 동기화하여 애니메이션의 부드러움과 성능을 보장합니다. CADisplayLink를 사용하면 NSTimer보다 더 정확한 타이밍과 FPS(Frames Per Second) 조절이 가능합니다.

2. 프로젝트 설정하기

먼저 새로운 Swift 프로젝트를 생성하거나 기존 프로젝트를 엽니다. Xcode를 사용하여 간단한 예제를 만들어보겠습니다.

3. CADisplayLink 객체 생성하기

CADisplayLink를 사용하기 위해서는 먼저 해당 객체를 생성해야 합니다. 보통 ViewController 내부에서 생성하며, 아래와 같이 작성할 수 있습니다.


import UIKit

class ViewController: UIViewController {
    var displayLink: CADisplayLink!

    override func viewDidLoad() {
        super.viewDidLoad()

        // CADisplayLink 생성하고, selector에 호출할 함수 지정
        displayLink = CADisplayLink(target: self, selector: #selector(update))

        // CADisplayLink를 원하는 RunLoop 모드에 추가
        displayLink.add(to: .main, forMode: .default)
    }

    @objc func update() {
        // 매 프레임마다 호출될 함수
        // 애니메이션 또는 화면 업데이트 로직을 여기에 작성
    }
}
    

4. 애니메이션 또는 화면 업데이트 로직 구현하기

update() 메서드 내부에 매 프레임마다 수행할 애니메이션 또는 화면 업데이트 로직을 구현합니다. 이 예제에서는 간단하게 뷰의 위치를 매 프레임마다 변경하는 애니메이션을 구현해보겠습니다.


@objc func update() {
    // 애니메이션 또는 화면 업데이트 로직을 구현합니다.
    // 이 예제에서는 뷰의 위치를 매 프레임마다 변경하는 애니메이션을 구현합니다.
    let newYPosition = view.frame.origin.y + 1
    view.frame.origin.y = newYPosition

    // 애니메이션을 멈추고 싶은 조건을 확인한 후, displayLink를 해제할 수 있습니다.
    // 예를 들어, 뷰의 새로운 위치가 화면 밖으로 벗어나면 애니메이션을 멈출 수 있습니다.
    if newYPosition > UIScreen.main.bounds.height {
        displayLink.invalidate()
    }
}
    

5. CADisplayLink 제거하기

애니메이션 또는 화면 업데이트가 더 이상 필요하지 않을 때, CADisplayLink를 제거하여 리소스를 해제해야 합니다. 위 예제에서는 애니메이션이 화면 밖으로 벗어날 때 displayLink를 해제하는 방법을 사용하였습니다.

결론

이제 Swift에서 CADisplayLink를 사용하는 방법을 알게 되었습니다. CADisplayLink를 이용하면 더 정확하고 성능 좋은 애니메이션을 구현할 수 있으며, 화면 업데이트 로직에 유용하게 활용할 수 있습니다. 실제 앱에서는 더 다양한 활용 방법이 있으니 창의적으로 활용해보시기 바랍니다. 감사합니다!

반응형

댓글