0

2つのUIViewをanchorPoint(1,0)と交差させるために、以下のコードを試しています。

UIView *v=[[UIView alloc] initWithFrame:CGRectMake(50,50, 100, 100)];
v.backgroundColor=[UIColor redColor];
v.layer.anchorPoint=CGPointMake(1,0);

UIView *v2=[[UIView alloc] initWithFrame:CGRectMake(50,50,200,300)];
v2.backgroundColor=[UIColor greenColor];
v2.layer.anchorPoint=CGPointMake(1, 0);

[self.view addSubview:v2];
[self.view addSubview:v];

このコードで得られる出力は次のとおりです。

2つのビューをアンカーポイントと交差させます

以下に示すように、赤いビューが緑のビューと重なり、両方が同じアンカーポイントを持っているように出力を探しています。

ここに画像の説明を入力してください

4

3 に答える 3

2

anchorPointと座標系に関する元のドキュメントをここで確認してください

23つのanchorPoint値:3つのanchorPoint値

更新#1:

(この画像はOSXの座標系を示しています!)

于 2012-07-18T15:18:54.877 に答える
1

つまり、赤いビューを、緑のビューと元の赤いビューの重なり合う領域のサイズにしたいということですか?

もしそうなら、

v.frame = CGRectIntersection(v.frame, v2.frame);
于 2012-07-18T14:45:48.533 に答える
1

あなたの例で何が起こっているかを説明するのに役立つかもしれません:

画面上に正確なサイズの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"];
于 2012-07-18T15:43:31.633 に答える