1

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

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

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

写真1には、parentView1というUIViewがあります(これは灰色のビューです)。サブビューがあります(写真の4つ)。

CGAffineTransformRotateをparentView1に適用する前に、ビュー(赤い縦線)をドラッグしてparentView1にドロップすると、結果は図2のようになります。

ただし、最初にparentView1でCGAffineTransformRotate(コードを参照)を実行し、次にドラッグアンドドロップして赤い垂直ビューをparentView1に追加すると、赤い垂直ビューも、ドロップするとすぐにparentView1(画像3)と同じに回転します。垂直方向のビュー。私はそれが起こらないようにしたい。ドラッグする前に、赤い垂直ビューを元のビューと同じ方向に配置する必要があります。

同じ効果が逆にも発生します。parentView1が回転している場合は、サブビューをparentView1からその境界の外側に移動します。

なにか提案を?

parentView1を回転させるコード:

self.parentView1.transform = CGAffineTransformRotate(self.parentView1.transform, degreesToRadians(45));

ビューを親から別のビューに移動するコード:

-(void)getNewPosition2:(UIView *)viewToConvert parentView:(UIView *)parentViewx superParentView:(UIView *)superParentView
{
    CGPoint newPoint = [superParentView convertPoint:viewToConvert.center fromView:parentViewx];
//    viewToConvert.layer.position = newPoint;
    viewToConvert.center = newPoint;
    [viewToConvert removeFromSuperview];
    [superParentView addSubview:viewToConvert];
}

上記のgetNewPostition2メソッドの呼び出し:

[self getNewPosition2:recognizer.view parentView:self.view superParentView:self.parentView1];
4

1 に答える 1

0

私は、parentView1 の変換行列を使用して両方のケースの角度を計算することで解決策を思いつきました: オブジェクトをparentView1 の内外に移動します。

オブジェクトをparentView1に移動する場合:

float angle = (2 * M_PI) - atanf(self.parentView1.transform.b / self.parentView1.transform.a );
viewToConvert.transform = CGAffineTransformRotate(viewToConvert.transform, angle);

オブジェクトをparentView1の外に移動する場合:

float angle = atanf(self.parentView1.transform.b / self.parentView1.transform.a);
viewToConvert.transform = CGAffineTransformRotate(viewToConvert.transform, angle);
于 2012-05-30T14:41:38.117 に答える