CALayer有2个非常重要的属性:position和anchorPoint
@property CGPoint position;
用来设置CALayer在父层中的位置
以父层的左上角为原点(0, 0)
@property CGPoint anchorPoint;
称为“定位点”、“锚点”
决定着CALayer身上的哪个点会在position属性所指的位置
以自己的左上角为原点(0, 0)
它的x、y取值范围都是0~1,默认值为(0.5, 0.5)
看仔细了,图很多,位置找好(注意紫色小方块的位置)
来了哦。重点的东西又来图了
对于上面图片比较蒙圈吧,嘻嘻接下来看文字咯
position和anchorPoint是CAlayer的两个属性.
我们以前修改一个控件的位置都是能过Frame的方式进行修改.
现在利用CALayer的position和anchorPoint属性也能够修改控件的位置.
这两个属性是配合使用的.
position:它是用来设置当前的layer在父控件当中的位置的.
所以它的坐标原点.以父控件的左上角为(0.0)点.
anchorPoint:它是决点CALayer身上哪一个点会在position属性所指的位置
anchorPoint它是以当前的layer左上角为原点(0.0)
它的取值范围是0~1,它的默认在中间也就是(0.5,0.5)的位置.
anchorPoint又称锚点.就是把锚点定到position所指的位置.
两者结合使用.想要修改某个控件的位置,我们可以设置它的position点.
设置完毕后.layer身上的anchorPoint会自动定到position所在的位置.
还是觉得很蒙圈吗?好嘛,我也比较懵
看代码咯:
@interface ViewController ()
// 这是直接拖得一个view
@property (weak, nonatomic) IBOutlet UIView *orangeView;
@property (nonatomic, weak) CALayer *layer;
@end
---------------------华丽的分割线-----------
- (void)viewDidLoad {
[super viewDidLoad];
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(200, 200, 100, 100);
layer.backgroundColor = [UIColor redColor].CGColor;
self.layer = layer;
[self.view.layer addSublayer:layer];
//UIView的center,就是它内部layer的position.
NSLog(@"center = %@",NSStringFromCGPoint(self.orangeView.center));
NSLog(@"position = %@",NSStringFromCGPoint(self.orangeView.layer.position));
}
#这两个输出是一样的喔《证据有图为证》
// 这个呃,这个我不知道怎么解释这个方法,常用的。
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// self.layer.position = CGPointMake(200, 200);
NSLog(@"center = %@",NSStringFromCGPoint(self.orangeView.center));
NSLog(@"position = %@",NSStringFromCGPoint(self.orangeView.layer.position));
self.orangeView.layer.anchorPoint = CGPointMake(0.5, 0);
}