CoreAnimation余下的链接

图层几何学

备注:

frame代表了图层的外部坐标(也就是父图层上占据的空间[指一个和屏幕平行的矩形能完全覆盖图层,比如说图层旋转了,那么他的frame就变大了]),bounds是内部坐标。

图层旋转按照锚点anchorPoint来旋转。

一般我们都知道子图层相对于父图层的位置坐标,但是有时候我们需要知道该子图层相对于其它图层的坐标,CALayer提供了convertPoint系列转换计算position方法。

zPosition最实用的功能就是改变图层的显示顺序。

CALayer不关心任何响应链事件,所以不能直接处理触摸事件或者手势。但是他有一系列的方法帮你处理事件:-containsPoint:和-hitTest:

-containsPoint:的用法,先获取相对于self.view的point,然后利用convertPoint系列方法将点转换为相对于目标layer的坐标,然后用目标layer调用containsPoint方法,看目标layer是否包含了point。包含了就返回YES。

-hitTest:的用法,该方法返回一个layer。返回最外层检测到点击点的layer,不需要利用convertPoint方法进行转换。注意:zPosition可以改变图层的显示顺序,但是不改变事件的传递顺序。

该文涉及了CALayer的集合结构,包括它的frame、position和bounds,介绍了三维空间内图层的概念,以及如何在独立的图层内响应事件,最后简单说明了在iOS平台,Core Animation对自动调整和自动布局支持的缺乏。


视觉效果

备注:

当你需要给一个view添加shadow的时候,如果对应的layer的masksToBounds设置为了YES,就会将边框外的全部裁剪掉,也就是会把shadow裁剪掉。这时候你就需要用一个透明的蒙板罩在view上面,设置蒙板的shadow就好了。

设置shadow,主要设置shadowOpacity不透明度。其次设置shadowColor、shadowOffset和shadowRadius。

图层的shadow并不总是方的,而是从图层的形状继承而来。但是实时计算shadow是非常消耗资源的,尤其是在图层有多个子图层,每个图层还有一个透明效果的寄宿图的时候。如果你知道阴影的形状,那么就可以设置shadowPath这个属性来进行处理了。如果是一个简单的矩形或者是圆啥的,用CGPath很好的到这些path,如果是比较复杂的,那就用UIBezierPath来获取path。

图层蒙板:图层有一个mask属性(CALayer类型),相当于在父图层上将这个layer盖上去,盖到的地方就是你获取到的显示图层。

minificationFilter和magnificationFilter属性可以用来设置图层上图片的清晰度。

该文介绍了一些可以通过代码应用到图层上的视觉效果,如圆角,阴影和蒙板。我们也了解了拉伸过滤器和组透明。


变幻

备注:

UIView的transform属性对应着CALayer 的affineTransform属性,都是仿射变换,所谓仿射变换就是保证变换后对应该平行的都是平行的。我们一般用的就是仿射变换。而CALayer也有一个transform属性(CATransform3D类型)。

混合变换就是利用比如CGAffineTransformScale();之类的方法来进行变换,第一个参数t会影响下次变换的值。eg:

第一个是缩小到0.5倍,第二个是旋转30度,第三个是平移200,但是你会发现最后一个并不是水平移动200,而是朝着30度方向平移了100.这就是前面的缩放影响了距离,旋转影响了角度。

CGAffineTransform transform = CGAffineTransformIdentity; //scale by 50%
    transform = CGAffineTransformScale(transform, 0.5, 0.5); //rotate by 30 degrees
    transform = CGAffineTransformRotate(transform, M_PI / 180.0 * 30.0); //translate by 200 points
    transform = CGAffineTransformTranslate(transform, 200, 0);
    //apply transform to layer
    self.layerView.layer.affineTransform = transform;
}

除了平时经常用的平移、旋转、缩放还有一种不常用的叫剪切变换也就是倾斜。这个要自己实现。 里面有例子

灭点:Core Animation定义了这个点位于变换图层的anchorPoint。意思就是当图层发生变换的时候,这个点永远位于图层变换之前的anchorPoint的位置。当改变一个图层的position的时候,同时也改变了它的灭点,做3D变换的时候要记住这一点,当你试图通过调整面m34来让它更具有3D效果时,应该首先把它放置在屏幕中央,然后通过平移来把它移动到指定的位置。但是何必这么麻烦,设置容器layer的sublayerTransform的m34为-1/500就好了。其它的子layer该怎么就怎么。

CALayeryou一个属性doubleSides来控制图层的背面是否需要绘制。有些没必要绘制的地方一定要设置它为NO,这样会减少资源浪费。


专用图层

备注:

CAShapeLayer是用来在CALayer上画图的工具类。画完之后,将CAShapeLayer对象添加到CALayer对象上去。

该文在圆角部分告诉了我们怎么给一个矩形自定义的添加圆角,而不是调用cornerRadius来将所有的直角变成圆角。

CATextLayer类比于UILabel。性能比UILable好。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值