CALayer的position和anchorPoint

原创 2015年11月19日 17:20:34

简单来说,一个CALayer对象的最终位置由position/anchorPoint确定,大小由bounds确定。
position:CALayer在父layer中的位置,默认是(0,0)
anchorPoint:是确定CALayer位置必不可少,同时也是一个支点,layer旋转的时候就是绕这个点旋转的。默认是(0.5,0.5),即在中央位置。 { (x,y) | 0<=x,y<=1 }
确定了position和anchorPoint之后,将CALayer的锚点移动到position位置,就是最后的位置了。
上代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];

    //确定position
    CGPoint position = CGPointMake(100, 100);
    //新建layer设置position和bounds,anchorPoint使用默认
    CALayer *layer = [CALayer layer];
    layer.backgroundColor = [UIColor blueColor].CGColor;
    layer.position = position;
    layer.bounds = CGRectMake(0, 0, 100, 100);
    [self.view.layer addSublayer:layer];
}

这里写图片描述
可以看到,锚点默认中心点,锚点和position重合。
我们重新设置一下锚点,设置为layer的左上角,再看一下效果。

layer.anchorPoint = CGPointZero;

这里写图片描述
可以看到新设置的锚点和position重合了。
图中的红线是我为了方便看加的辅助线:

 /*辅助线*/
    CALayer *lineLayer1 = [CALayer layer];
    lineLayer1.position = CGPointMake(0, position.y);
    lineLayer1.bounds = CGRectMake(0, 0, position.x, 1);
    lineLayer1.backgroundColor = [UIColor redColor].CGColor;
    lineLayer1.anchorPoint = CGPointZero;
    [self.view.layer addSublayer:lineLayer1];
    CALayer *lineLayer2 = [CALayer layer];
    lineLayer2.position = CGPointMake(position.y, 0);
    lineLayer2.bounds = CGRectMake(0, 0, 1, position.y);
    lineLayer2.backgroundColor = [UIColor redColor].CGColor;
    lineLayer2.anchorPoint = CGPointZero;
    [self.view.layer addSublayer:lineLayer2];
    CALayer *positionLayer = [CALayer layer];
    positionLayer.position = position;
    positionLayer.backgroundColor = [UIColor redColor].CGColor;
    positionLayer.bounds = CGRectMake(0, 0, 4, 4);
    positionLayer.cornerRadius = 2;
    [self.view.layer addSublayer:positionLayer];
    /*end*/

另外,CALayer的position,bounds和anchorPoint属性支持隐式动画,即修改属性的时候会默认有动画变换。要想知道属性是否支持隐式动画,可以定义处有没有Animatable标记,就像下面这样。

/* The position in the superlayer that the anchor point of the layer's
 * bounds rect is aligned to. Defaults to the zero point. Animatable. */

@property CGPoint position;
版权声明:本文为博主原创文章,未经博主允许不得转载。

CAlayer层的属性position和anchorPoint

1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property CGPoint position; 用来设置CALayer在父层中的位...

CALayer中AnchorPoint 与 Position 的关系与区别

今天,通过阅读 易知iphone开发教程(2) 以及 不断的调试 其中附带的代码,理解了AnchorPoint 和 Position 的位置关系。以下把自己的理解记录如下:         1) a...

iOS CALayer中position和anchorPoint的联系和区别

position :The layer’s position in its superlayer’s coordinate space. Animatable 翻译成中文就是:当前的layer在其父l...

理解CALayer中position与anchorPoint属性

引言 相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与...

iOS开发UI篇—CAlayer层的属性,关于position和anchorPoint介绍

转自:http://www.cnblogs.com/wendingding/p/3800736.html iOS开发UI篇—CAlayer层的属性 一、position和anc...

iOS-CALayer的anchorPoint锚点细解

CALayer有个非常重要的属性,锚点,对于CALayer的隐式动画,其anchorPoint起着至关重要的作用/* Defines the anchor point of the layer's b...
  • Mazy_ma
  • Mazy_ma
  • 2016年09月01日 14:23
  • 728

position与anchorPoint理解(一)

转自 彻底理解position与anchorPoint 如果已知layer的frame值,根据上面的结论,那么position的值便可以用下面的公式计算: position.x = frame...

position和anchorPoint

一、理论概述 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property CGPoint position; 用来设置CALayer在父层中的位置...

理解frame、bounds、center、position、anchorPoint

frame:描述当前界面元素在其父界面元素中的位置和大小。 bounds:描述当前界面元素在其自身坐标系统中的位置和大小。 center:描述当前界面元素的中心点在其父界面元素中的位置,图层用了“po...

AnchorPoint And Position 对比及区别

http://blog.163.com/happysky_study/blog/static/17767615020110215119836/ AnchorPoint And P...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CALayer的position和anchorPoint
举报原因:
原因补充:

(最多只允许输入30个字)