티스토리 뷰

iOS

iOS ) displayIfNeeded() / Core Animation

Zedd0202 2018. 1. 3. 18:48
반응형

안녕하세요 :) Zedd입니다.

저번에 displayIfNeed()에 대해서 본다고 그랬죠 ㅎㅁㅎ 키키

읽기전에 

: <View / 레이아웃 관련 메소드>


위 글을 읽고오시면 이해에 더 도움이..!!!!!

시작할게요.


displayIfNeeded()



먼저 이 displayIfNeeded()라는 아이는 다양한 클래스의 인스턴스 메소드였는데요,



저는 여기서 가운데에 있는 CALayer클래스의 displayIfNeeded()만 볼거에요. NSView랑 NSWindow도 읽어봤는데 다 AppKit과 관련된 내용이더라구요..일단 저는 iOS개발자니...CALayer를 공부하는게 더 도움될 것 같아서 ㅎ


아무튼 CALayer의  displayIfNeeded()를 봅시다.

정의는


"Initiates the update process for a layer if it is currently marked as needing an update."

오..현재 업데이트가 필요한것으로 표시된 경우, 레이어의 업데이트 프로세스를 시작합니다.


라네요.

<View / 레이아웃 관련 메소드>글을 읽고오셨다면 이제 설명할 내용이 더 쉽게 이해되실겁니다.


필요에따라 이 메소드를 호출하여 레이어의 내용을 표준 업데이트 주기 외로 강제 업데이트 할 수 있습니다. 그러나 그렇게 하는 것은 일반적으로 필요하지 않습니다.

레이어를 업데이트하는 가장 좋은 방법은 setNeedsDisplay()를 호출하고, 다음주기 동안 시스템이 레이어를 업데이트 하도록 하는 것입니다.


...!!! 역시 UIView의 layoutIfNeeded()와 조금 비슷하네요.

업데이트해! -> 응!!!이니까요.

하지만 displayIfNeeded()는 CALayer의 인스턴스 메소드라는 점..ㅎ

근데 익숙한 메소드가 하나 나옵니다.


"레이어를 업데이트하는 가장 좋은 방법은 setNeedsDisplay()를 호출하고, 다음주기 동안 시스템이 레이어를 업데이트 하도록 하는 것입니다."


setNeedsDisplay()?....우리 지금 CALayer의 displayIfNeeded()보는 중이었는데...왜 갑자기 저번에 배운 UIView의 setNeedsDisplay()가 나오는 걸까요?

그것은...

별거없고..



CALayer에도  setNeedsDisplay()가 있을 뿐...근데 어렵게 생각하지 마세요. 그 궁극적인..? 하는일 그런거는 UIView 인스턴스 메소드일때와 같습니다. 위에서 한번 말했죠? 

레이어를 업데이트하는 가장 좋은 방법은 setNeedsDisplay()를 호출하고, 다음주기 동안 시스템이 레이어를 업데이트 하도록 하는 것입니다. 라구요. UIView의 setNeedsDisplay()도 다음 드로잉 주기때 View를 업데이트 하는 거였죠.


UIView의 layout과 관련된 메소드 들도 역시나 CALayer에 있습니다.



마찬가지로 UIView에서 했던것들과 개념이 비슷합니다. 

자..그럼 여기서 궁금한점이 하나 생기는데요.

Layer? Layer를 그린다는게 모냐...그럼 CALayer가 뭔지 알아야하는데 CALayer를 알려면 Core Animation을 알아야합니다.


그럼 Core Animation이 뭔지 알아봅시다..

정의는 상당히ㅣㅣㅣㅣㅣ아주 상당히 간-단한데요,


"Render, compose, and animate visual elements."

시각적 요소(visual elements)를 렌더링, 합성하고 애니메이션화합니다.


라네요. 

설명을 더 봅시다.

Core Animation은 CPU에 부담을 주지 않고, 앱 속도를 저하시키지 않으면서 높은 프레임 속도와 부드러운 애니메이션을 제공합니다. 애니메이션의 각 프레임을 그리는데 필요한 대부분의 작업이 수행됩니다. 

시작 및 종료지점과 같은 몇가지 애니메이션 매개변수를 구성하고 Core Animation이 시작하도록 지시합니다. Core Animation은 나머지 작업을 수행하여 렌더링 작업을 가속화 하기 위해 대부분의 작업을 전용 그래픽 하드웨어에 넘깁니다. 자세한 내용은 Core Animation Programming Guide를 참고하세요. 

Core Animation Programming Guide읽어보면..요 위에서 말한거랑 똑같이 말합니다. 자랑을 좀 더 자세하게 해놓은 느낌 

우리 Core Animation이 얼마나 좋냐면...진짜...CPU 부담 안주고.......높은 프레임 속도와 부드러운 애니메이션....그냥 너는 몇가지 지정해주면 Core Animation이 다 알아서 해주니까.......

이런느낌 ㅎ 

그럼 Core Animation이 뭔지 알았으니

CALayer가 뭔지 알아봅시다.

CALayer는 1빠로 있음




CALayer의 정의는 

"이미지 기반 컨텐츠를 관리하고 해당 컨텐츠에 대한 애니메이션을 수행할 수 있게 해주는 객체입니다."

라고 하네요 :)

일단 저는 여기를 읽어보는 걸 추천드리고 싶은데, 애니메이션이 가능한 CALayer 프로퍼티들의 모음?이에요.

우리는 layer를 은연중에 사용하고 있었답니다 :3 바로


 View의 테두리를 지정해줄때!!!

아 아무튼 displayIfNeeded()이야기 하다가 여기까지 왔는데, 아무튼 displayIfNeeded()는 CALayer에서 사용할 수 있는 메소드라는거!!!!

오늘도 도움이 되었길 바라며 적절한 예제를 아직 못찾았는데..찾으면 추가하도록할게요!!~.~

반응형