CALayer的position和anchorPoint

简单来说,一个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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值