它可能有助于描述您的示例中发生的事情:
您将两个矩形放在屏幕上的确切大小,在一个确切的位置(50, 50)
(相对于它们在左上角的原点)它们都有锚点,默认情况下它们都在它们的中心。想象一下在这些中心点放置一个大头针。现在你说你实际上想要右上角的别针而不是中心。
两种情况之一将发生,要么
1) 矩形将保持静止,引脚将自行移动到右上角red:(150, 50)
green:(250, 50)
,这不是您想要的。
或者
2)引脚将保持静止,矩形将自行移动,直到它们的右上角是引脚所在的位置red pin:(100, 100)
green pin:(150, 200)
,这也不是您想要的!
第二种选择是实际发生的情况。
根据文档,layer.position
是相对于 的layer.anchorPoint
,因此您应该尝试将 设置anchorPoint
为右上角,然后将position
两个矩形图层的 设置为您想要的确切位置。例如
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(50,50, 100, 100)];
v.backgroundColor=[UIColor redColor];
v.layer.anchorPoint=CGPointMake(1,0);
v.layer.position = CGPointMake(200, 50);
UIView *v2=[[UIView alloc] initWithFrame:CGRectMake(50,50,200,300)];
v2.backgroundColor=[UIColor greenColor];
v2.layer.anchorPoint=CGPointMake(1, 0);
v2.layer.position = CGPointMake(200, 50);
[self.view addSubview:v2];
[self.view addSubview:v];
只是为了好玩:这是一个动画,展示了矩形如何从它们的初始位置initWithFrame
到它们的最终位置,相对于它们中心的锚点。
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(50,50, 100, 100)];
v.backgroundColor=[UIColor redColor];
UIView *v2=[[UIView alloc] initWithFrame:CGRectMake(50,50,200,300)];
v2.backgroundColor=[UIColor greenColor];
[self.view addSubview:v2];
[self.view addSubview:v];
UIView *ap=[[UIView alloc] initWithFrame:CGRectMake(0,0, 10, 10)];
ap.backgroundColor=[UIColor blackColor];
ap.center = v.layer.position;
UIView *ap2=[[UIView alloc] initWithFrame:CGRectMake(0,0, 10, 10)];
ap2.backgroundColor=[UIColor blackColor];
ap2.center = v2.layer.position;
[self.view addSubview:ap];
[self.view addSubview:ap2];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"anchorPoint"];
animation.duration = 2.0;
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(1,0)];
animation.autoreverses = YES;
animation.repeatCount = 10;
[v.layer addAnimation:animation forKey:@"anchorPoint"];
[v2.layer addAnimation:animation forKey:@"anchorPoint"];