[ios] UIView와 CALayer의 차이점은 무엇입니까?

둘 다 동일한 속성을 가지고 있으며 둘 다 다른 종류의 애니메이션을 지원하며 둘 다 다른 데이터를 나타냅니다. UIView와 CALayer의 차이점은 무엇입니까?



답변

iOS에서 모든 UIView는 Core Animation CALayer에 의해 지원되므로 UIView를 사용할 때 CALayers를 다루고 있습니다. Core Animation이 존재하기 전에 진화 한 Mac의 NSView와는 달리 UIView는 이러한 CALayer를 둘러싼 경량 래퍼입니다.

비슷한 질문 “Mac / iPhone에서 CALayer를 언제 사용해야합니까?” 에서 설명했듯이 , CALayers로 직접 작업한다고해서 UIView에 비해 성능이 크게 향상되지는 않습니다. UIViews 대신 CALayers를 사용하여 사용자 인터페이스 요소를 빌드하려는 이유 중 하나는 Mac으로 매우 쉽게 이식 할 수 있기 때문입니다. UIView는 NSView와 매우 다르지만 CALayer는 두 플랫폼에서 거의 동일합니다. 이것이 Core Plot 프레임 워크가 다른 UI 요소 대신 CALayers를 사용하여 그래프를 레이아웃하는 이유입니다.

UIView가 CALayers를 통해 제공하는 한 가지는 사용자 상호 작용에 대한 기본 제공 지원입니다. CALayers 계층을 관리하는 경우 직접 구축해야하는 터치 및 기타 관련 작업에 대한 적중 테스트를 처리합니다. 직접 구현하는 것은 그리 어렵지 않지만 CALayer 전용 인터페이스를 구축 할 때 작성해야하는 추가 코드입니다.

기본 UIView 클래스가 허용하는 것보다 더 복잡한 애니메이션을 수행 할 때 UIView의 기본 레이어에 액세스해야하는 경우가 많습니다. UIView의 애니메이션 기능은 iOS SDK가 성숙함에 따라 성장했지만 여전히 기본 CALayer와 상호 작용하여 가장 잘 수행되는 몇 가지 작업이 있습니다.


답변

Ray Wenderlich 블로그에서 ( Tutorial )

CALayer는 시각적 콘텐츠가있는 화면의 사각형을 나타내는 단순한 클래스입니다. “하지만 잠깐만 기다려주십시오.”라고 말할 수 있습니다. “그게 바로 UIView입니다!” 그것은 사실입니다. 그러나 그것에 대한 트릭이 있습니다 : 모든 UIView는 그것이 그리는 루트 레이어를 포함합니다!


답변

간단히 말해서 UIView는 UIResponder에서 상속하고 사용자의 이벤트를 처리하며 주로 렌더링, 애니메이션 등에 초점을 맞춘 NSObject에서 상속하는 CALayer를 포함합니다.


답변

UIView에 대한 컨테이너입니다 CALayers. 사용 UIKit.

CALayer내용을 그리는 곳. 사용CoreGraphics

기능과 같은 사용자 지정 컨트롤로 작업하는 경우 정확한 기본 렌더링을 위해 더 많은 레이어가 포함 된 단일보기로 진행하는 것이 좋습니다. 때문에 CALayers보다 더 무게가있다 UIView.

Mac 및 iOS 용 공통 골격을 만들려면 CALayers. 두 플랫폼 모두에서 사용할 수 있기 때문입니다.

UIView위임을 사용하여 달성 터치 이벤트 등의 필요 기능 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStart이벤트 및 기타 등UIKit 기능을.

CALayersCore Graphics 지식 을 사용 하려면 모든 간단한 뷰 렌더링 UIView으로 충분합니다.


답변

큰 차이점은 UIView가 모바일 장치의 CocoaTouch 용으로 설계되었다는 것입니다. CALayer가 제공하지 않은 이벤트 핸들러를 추가합니다.


답변

UIView : 뷰에는 더 복잡한 계층 구조 레이아웃이 있습니다. 탭, 핀치, 클릭 등과 같은 사용자 상호 작용을받을 수 있습니다. UIViews 작업은 메인 스레드에서 발생하며 CPU 성능을 사용하고 있음을 의미합니다.

CALayer : 반면 레이어는 더 단순한 계층 구조를 갖습니다. 즉, 해결하는 것이 더 빠르며 화면에 더 빨리 그릴 수 있습니다. 뷰와 달리 응답자 체인 오버 헤드가 없습니다. 레이어는 GPU에 직접 그려집니다. CPU에 부담을주지 않고 별도의 스레드에서 발생합니다.

자세한 내용 : https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5


답변