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;
版权声明:本文为博主原创文章,未经博主允许不得转载。

UIView CALayer frame,position ,anchorPoint的关系

UIView的几何属性有 frame,bounds,center. CALayer的几何属性有 frame,bounds,position,anchorPoint UIView的frame是由bo...
  • dfman1978
  • dfman1978
  • 2017年06月27日 11:04
  • 239

CALayer动画实践(二):CAReplicatorLayer的用法

http://www.csdn.net/article/2015-09-09/2825659?utm_source=tuicool CALayer动画实践(二):CAReplicatorLaye...
  • zhuweideng
  • zhuweideng
  • 2015年09月09日 18:19
  • 317

彻底理解CALayer的position与anchorPoint

引言 相信初接触到CALayer的人都会遇到以下几个问题:   为什么修改anchorPoint会移动layer的位置?  CALayer的position点是哪一点呢?  anchorPoint与...
  • openglnewbee
  • openglnewbee
  • 2015年12月22日 10:21
  • 2913

CALayer的anchorPoint和position

position决定layer在父视图上面的位置,而anchorPoint决定layer上哪个点是position上面的点。...
  • g18369905726
  • g18369905726
  • 2017年03月16日 14:05
  • 59

UIView 中position 和anchorPoint 的了解 iOS

iOS开发中 position 和anchorPoint 的彻底了解
  • wang_gwei
  • wang_gwei
  • 2016年03月18日 21:22
  • 693

48.iOS动画和理解position与anchorPoint

# 1. 动画的使⽤场景:iOS中的动画是指一些视图上的过渡效果,合理利用动画能提⾼用户体验,UIView动画影响的属性 frame:视图框架 center:视图位置 alpha:视图透明度 bo...
  • yunyuan_
  • yunyuan_
  • 2015年08月29日 10:50
  • 2357

ios-anchorPoint、position理解

anchorPoint(锚点)是 layer的一个属性,下面我们来看看其对view的影响,本文主要通过图片方式展现: 锚点用单位坐标来描述也就是图层的相对坐标。在苹果文档中说明左下是(0,0),右上是...
  • zyzxrj
  • zyzxrj
  • 2016年08月05日 17:29
  • 929

CALayer与UIView的选择,CALayer的anchorPoint和position研究

通过CALayer,就能做出跟UIImageView一样的界面效果// 新建一个图层,并在这个图层上面显示一张图片 CALayer *imageLayer = [CALayer laye...
  • Rephontil
  • Rephontil
  • 2016年11月10日 00:31
  • 111

CALayer的position与anchorPoint

转自:http://www.cnblogs.com/benbenzhu/p/3615516.html anchorPoint 一般都是先介绍position,再介绍anchorPoin...
  • crs258
  • crs258
  • 2016年12月20日 18:27
  • 377

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

position :The layer’s position in its superlayer’s coordinate space. Animatable 翻译成中文就是:当前的layer在其父l...
  • kelin_Li
  • kelin_Li
  • 2016年03月25日 16:42
  • 1340
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CALayer的position和anchorPoint
举报原因:
原因补充:

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