我有一個非常基本的問題:如何做的時候,你想畫的形狀(我不是在談論textfields
,switches
或其他使用UIView
和CAShapeLayer
之間你選擇控制,只是繪圖)?使用的UIView主場迎戰CAShapeLayer(繪畫,動畫,用戶交互)
我的理解是,UIView
(作爲UIKit
的一部分)使用正常的CALayer
下繪製其內容。如果這是正確的,那麼CAShapeLayer
(或一般CALayer
)將是完全相同的東西,只有沒有額外UIKit
給你。
那麼,什麼時候使用UIView
有意義,何時使用CAShapeLayer
有意義?
是CAShapeLayer
更快?一般情況下,UIKit
更適合手勢識別或用戶交互?
給你更多的上下文,這裏就是我一直試圖做的時候這個問題上來:
我想這些紅色圓圈圍繞圓心旋轉。但是,用戶應該能夠在旋轉的同時點擊紅色圓圈。
在這裏,我看到兩個主要選項(可能還有更多),以添加這些紅色圓圈中的一種:
- 創建
UIView
,操縱其層的cornerRadius和使用CGAffineTransform
旋轉。使用UIBezierPath
創建CAShapeLayer
。我可以旋轉它使用CATransform3D
我唯一的問題在這裏是user interaction
。由於它不斷移動(旋轉),我必須訪問正確的框架。我可以使用presentation layer
(我認爲UIView
也在引擎蓋下使用)。
此時,我不確定是否使用UIView
s或CAShapeLayer
s。另外,我不確定以這種方式進行動畫製作是否是這種情況下的正確方法。可能會有更好的選擇,也會消除有關使用哪一個的問題。
感謝您對此的看法。
是的,我讀過。 「(...)出於這個原因,每個應用程序必須仍然有一個或多個視圖來處理這些類型的交互(...)」。如果他們的意思是,這些圖層一般應該嵌入到'UIView'中,這意味着'CAShapeLayers'在我的情況下是最好的(因爲嵌入的'UIView'可以處理交互)。如果它們的意思是,每個圖層都需要它自己的視圖(=使用一個由圖層支持的'UIView'),我應該使用'UIView's。我不確定這一點。我的意思是,我確實有一個'UIView',我在這裏做了所有這些,我只是不知道我應該使用'subviews'還是'sublayers' – Quantm
@quantm:iOS中的每個View都有層次支持。默認情況下,你的視圖帶有一個CALayer,你無法替換現有的CALayer,無論你添加的圖層是哪個子圖層,那麼你可以使用CAShapeLayer並將它作爲子圖層添加到視圖的圖層中。你不能使用沒有視圖的簡單圖層,因爲你希望用戶與圈子交互 –
如果沒有用戶交互的簡單動畫,那麼你可以使用CALayers並將它們添加到viewController的視圖,並應用各種CoreAnimation API來動畫,但因爲你需要點擊每個圈子你需要爲每個圓圈創建視圖,併爲每個視圖添加CAShapeLayer作爲子圖層,然後將圓視圖添加爲子視圖到ViewController視圖 –