あなたの例で何が起こっているかを説明するのに役立つかもしれません:
画面上に正確なサイズの2つの長方形を正確な位置に配置します(50, 50)
(左上隅の原点に対して)。どちらにもアンカーポイントがあり、デフォルトでは中央にあります。これらの中心点にピンを置くことを想像してみてください。ここで、実際には中央ではなく右上隅にピンが必要だと言います。
次の2つのいずれかが発生します
1)長方形は静止したままで、ピンは右上隅に移動しますがred:(150, 50)
green:(250, 50)
、これは希望どおりではありません。
また
2)ピンは静止したままで、長方形は右上隅がピンがある場所になるまで移動しますred pin:(100, 100)
green pin:(150, 200)
。これも希望どおりではありません。
2番目のオプションは、実際に何が起こるかです。
ドキュメントによると、はに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"];