移动到转换的视图时保持原始的视图方向

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

在图1中,我有一个名为parentView1的UIView(这是灰色的颜色视图)。 它有子视图(图片中的4)。

在将CGAffineTransformRotate应用到parentView1之前,我可以拖动一个视图(红色垂直)并放入parentView1,结果如图2所示。

但是,如果我首先在parentView1上执行CGAffineTransformRotate(请参阅代码),然后通过拖放将红色垂直视图添加到parentView1中,红色垂直视图也会立即旋转到与parentView1(图3)相同的状态垂直的看法。 我不希望它发生。 我需要将红色的垂直视图放置在原来的方向上,然后才能被拖走。

反过来也会发生同样的效果:如果parentView1已被旋转,则将子视图从parentView1移动到边界之外。

任何build议?

代码旋转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]; 

我想出了一个解决scheme,通过使用parentView1的变换matrix来计算两种情况下的angular度:将对象移入和移出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);