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 回答