[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
기능을.
CALayers
Core Graphics 지식 을 사용 하려면 모든 간단한 뷰 렌더링 UIView
으로 충분합니다.
답변
큰 차이점은 UIView가 모바일 장치의 CocoaTouch 용으로 설계되었다는 것입니다. CALayer가 제공하지 않은 이벤트 핸들러를 추가합니다.
답변
UIView : 뷰에는 더 복잡한 계층 구조 레이아웃이 있습니다. 탭, 핀치, 클릭 등과 같은 사용자 상호 작용을받을 수 있습니다. UIViews 작업은 메인 스레드에서 발생하며 CPU 성능을 사용하고 있음을 의미합니다.
CALayer : 반면 레이어는 더 단순한 계층 구조를 갖습니다. 즉, 해결하는 것이 더 빠르며 화면에 더 빨리 그릴 수 있습니다. 뷰와 달리 응답자 체인 오버 헤드가 없습니다. 레이어는 GPU에 직접 그려집니다. CPU에 부담을주지 않고 별도의 스레드에서 발생합니다.
자세한 내용 : https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5