之前我们讲过可以用CALayer搭配CATransform3D来实现将View做3D旋转, 今天我们再看一个3D的新东西 CATransformLayer, 看名字就知道这个layer跟旋转有关, 那么具体是什么呢 可以先创建一个CATransformlayer容器, 正方体的6个面我们以3D旋转后的Layer表示, 加入到容器中, 调整好每个面的角度和位置让他们拼接再一起就是一个正方体了 我们上代码吧 - (void )viewDidLoad { [super viewDidLoad]; //create cube layer CATransformLayer *cube = [CATransformLayer layer]; //add cube face 1 CATransform3D ct = CATransform3DMakeTranslation
---- CATransformLayer 老司机上面提到过,CALayer做矩阵变换你能看到的只是他在XY轴上的投影,这时你若想看到透视效果,就需要使用到M34或CATransformLayer。 其实他两个又有一些区别,CATransformLayer是让你看到的不只是其在XY轴上的投影。 说起来不好懂,看下面的图吧。 TransformLayer CATransformLayer可以让其的子视图各自现实自身的真实形状,而不是其在父视图的投影。 //create cube layer CATransformLayer *cube = [CATransformLayer layer]; //add cube face 1 本身CATransformLayer不具有任何其他属性,其实他更像是一个容器。它本身至渲染其子图层,自身没有任何layer的属性。
用来管理可滑动的区域 CAShapeLayer 绘制立体的贝塞尔曲线 CATextLayer 可以绘制AttributeString CATiledLayer用来管理一副可以被分割的大图 CATransformLayer
9.CATransformLayer CATransformLayer用于构建一些3D效果的图层。
QuartzCore.CAAnimation // 几何变换相关 import QuartzCore.CATransaction import QuartzCore.CATransform3D import QuartzCore.CATransformLayer
QuartzCore.CATransform3D /// https://www.jianshu.com/p/3dd14cfbdc53 import QuartzCore.CATransformLayer
preservesDepth:如果设置为YES,图层将保持于CATransformLayer类似的性质和相同的限制 instanceDelay:设置子层相对于前一个层的延迟时间 instanceTransform
至少当你用正常的CALayer的时候是这样,CALayer有一个叫做CATransformLayer的子类来解决这个问题。具体在第六章“特殊的图层”中将会具体讨论。 1.12.2.4 CATransformLayer 当我们在构造复杂的3D事物的时候,如果能够组织独立元素就太方便了。 CATransformLayer解决了这个问题,CATransformLayer不同于普通的CALayer,因为它不能显示它自己的内容。只有当存在了一个能作用于子图层的变换它才真正存在。 CATransformLayer并不平面化它的子图层,所以它能够用于构造一个层级的3D结构,比如我的手臂示例。 那么,就让我们来试一试CATransformLayer吧,第一个问题就来了:在第五章,我们是用多个视图来构造了我们的立方体,而不是单独的图层。
专用图层 6.1 CAShapeLayer 6.2 CATextLayer 6.3 CATransformLayer 6.4 CAGradientLayer 6.5 CAReplicatorLayer 第3篇:CATransformLayer CATransformLayer不同于普通的CALayer,因为它不能显示它自己的内容。只有当存在了一个能作用域子图层的变换它才真正存在。 CATransformLayer并不平面化它的子图层,所以它能够用于构造一个层级的3D结构 第4篇:CAGradientLayer CAGradientLayer是用来生成两种或更多颜色平滑渐变的。
CAScrollLayer,CATextLayer,AVPlayerLayer,CAGradientLayer,CAReplicatorLayer,CATiledLayer,CAShapeLayer,CAEAGLLayer,CATransformLayer