0
点赞
收藏
分享

微信扫一扫

Core Animation - 图层几何学<二>


上一篇博客中说到锚点,然后说了时钟里面的运用,忘记详细说明了,这里补充下,运用在了表针上面,可以看到表针是由图片做的,为了转动起来看着好看,最简单的办法就是图片做的长点,还要按照表针的位置来做时分秒的指针,但这对内存来说造成了不必要的影响,所以anchorPoint很好的利用图层的属性解决了占用内存的问题,所以指针按照方便的方法来做,设置他们的锚点:

self.secondHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.minuteHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.hourHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);

根据需要设置合适的锚点就可以让他们看起来协调的运转。
接下来继续说剩下的关于图层几何的东西:
1.坐标系
关于坐标系有几个方法:

- (CGPoint)convertPoint:(CGPoint)point fromLayer:(CALayer *)layer; 
- (CGPoint)convertPoint:(CGPoint)point toLayer:(CALayer *)layer;
- (CGRect)convertRect:(CGRect)rect fromLayer:(CALayer *)layer;
- (CGRect)convertRect:(CGRect)rect toLayer:(CALayer *)layer;

他们的作用是把点或者图层从它的父图层变化到另一个图层。
2.翻转的几何结构
在iOS中,图层的position位于它的左上角,而在Mac OS中position位于图层的右下角,他们呈对称关系,在Core Animation中有geometryFlipped这么个属性来适配这种情况,它能决定一个图层的坐标是否相对于其父视图是垂直翻转的,它是一个布尔变量,在iOS中默认为NO,当设置为YES时,它的子视图将从底部开始排版。
3.Z坐标轴
这个很容易理解,就是3D了,做过开发的都知道,x轴为左上角水平往右,y轴为左上角水平往下,那么显而易见,z轴为左上角垂直往上,位于一个父视图中的两个子图层,使他们有一部分重叠在一起,并且颜色不一样,改变他们的z坐标来看下会发生什么,对,如果A盖住了B,设置B的z轴坐标为1.0,或者同时设置他们两个,但B的z轴坐标大于A,你会发现B把A盖住了部分,

self.greenView.layer.zPosition = 1.0f;

像这样,是不是很有意思。
3.Hit Testing
我们前面说过CALayer没有响应事件,不能直接处理点击和触摸事件,但是它却有别的方法帮助完成这些功能, -containsPoint:和hitTest: 。
不详细说明了,直接上代码,需要注意的是containsPoint这个方法:​​​https://github.com/codeliu6572/HitTest​​​
4.自动布局
这里的自动布局和你认识的那个“自动布局”不一样,这个自动布局当屏幕旋转时父视图的字图层不能适配屏幕,需要用CALayerDelegate来手动设置:

- (void)layoutSublayersOfLayer:(CALayer *)layer;

当bounds被改变或者setNeedsLayout方法被调用时这个方法被调用,它和视图的方法比较起来效果差了不少,这就是为什么我们使用视图来自动布局而不是用CALayer图层的这个方法了。所以要学习自动布局还是看看Autolayout吧。


举报

相关推荐

0 条评论