2011-10-19 50 views

回答

195

在iOS上,每個UIView都由Core Animation CALayer支持,因此即使您沒有意識到,也可以在使用UIView時處理CALayers。與Core Animation存在之前演化的Mac上的NSViews不同,UIViews旨在成爲這些CALayers周圍的輕量級包裝。

正如我在類似的問題"When to use CALayer on the Mac/iPhone?"描述,直接與CALayers工作不給你顯著的性能優於UIViews。您可能想要使用CALayers而不是UIViews構建用戶界面元素的原因之一是它可以非常容易地移植到Mac。 UIViews與NSViews非常不同,但CALayers在兩個平臺上幾乎完全相同。這就是爲什麼Core Plot框架使用CALayers而不是其他UI元素繪製其圖形的原因。

一件事UIViews提供了CALayers是內置的用戶交互的支持。他們處理觸摸測試以及其他相關操作,如果管理CALayers層次結構,您需要自己構建自己的操作。自己實現這並不難,但是在構建僅CALayer接口時需要編寫額外的代碼。

你將經常需要訪問底層的一個UIView執行更復雜的動畫比基UIView類允許時。隨着iOS SDK的成熟,UIView的動畫功能也在不斷增加,但仍有一些事情最好通過與底層CALayer進行交互來完成。

35

從雷Wenderlich博客(Tutorial

CALayers只是代表屏幕 與視覺內容上的一個矩形的類。 「但請稍等,」你可能會說,「這就是UIViews的原因!」這是真的,但有一個技巧: 每個UIView都包含一個它所依賴的根層。

+1

一個很好的藝術答案。 –

+0

很棒的簡短回答! –

22

簡單地說,從UIView的繼承NSResponder類,處理來自用戶的事件,包含CALayer的,它從NSObject的繼承,主要集中在渲染,動畫等

0

最大的區別是UIView的是專爲CocoaTouch移動設備上。它增加了一些CALayer沒有提供的事件處理程序。

6

UIViewCALayers的容器。使用UIKit

CALayer我們借鑑的內容。使用CoreGraphics

如果你與像功能的自定義控制工作,這將是巨大含有準確本地繪製多層單一視圖中前進。由於CALayersUIView更輕。

要創建適用於Mac和iOS常見的骨骼,請使用CALayers您的應用程序設計。因爲它在兩個平臺都可用。

UIView具有使用代表-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event,tochesStart類似事件和其他UIKit功能實現的觸摸事件的功能。

CALayers一起使用核心圖形的知識。任何簡單的視圖渲染UIView就足夠了。

相關問題