position与anchorPoint,傻傻分不清。
position是相对父视图而言的 是子视图anchorPoint在父视图的坐标位置。
anchorPoint 是相对于自己而言的 默认为(0.5 0.5)。
anchorPoint的定义不多说,看下图白色的点。主要讲下position与anchorPoint的关系。
//默认
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:view];
view.backgroundColor = [UIColor redColor];
UIView *subView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[view addSubview:subView];
subView.backgroundColor = [UIColor yellowColor];
默认情况下,黄色子视图会将红色父视图完全遮盖,这时黄色子视图的position是红色父视图的中心点为(50,50),anchorPoint 为(0.5,0.5)。
在上面的代码中加入效果是一样的。
//position是相对父视图而言的 是子视图anchorPoint在父视图的坐标位置
subView.layer.position = CGPointMake(50, 50);
//anchorPoint 是相对于自己而言的 默认为(0.5 0.5)。
subView.layer.anchorPoint = CGPointMake(0.5, 0.5);
当我们只改变anchorPoint为(0,0)时,由于position不变,会得到下图这样。由于position不变,anchorPoint为(0,0)即是子视图的左上角,position 表示anchorPoint在父视图的位置。anchorPoint与position重合。
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 200, 100, 100)];
[self.view addSubview:view];
view.backgroundColor = [UIColor redColor];
UIView *subView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[view addSubview:subView];
subView.backgroundColor = [UIColor yellowColor];
subView.layer.anchorPoint = CGPointMake(0, 0);
那么我们改变黄色子视图的position会怎么样呢。
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 200, 100, 100)];
[self.view addSubview:view];
view.backgroundColor = [UIColor redColor];
UIView *subView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[view addSubview:subView];
subView.backgroundColor = [UIColor yellowColor];
subView.layer.position = CGPointMake(100, 100);