我有一个非常基本的问题:如何做的时候,你想画的形状(我不是在谈论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视图 –