2012-05-29 71 views
1

enter image description here保持原始视图方向移动到变换后视图

enter image description here

enter image description here

在第1张时,我有一个UIView称为parentView1(它是灰色图)。它有子视图(图片中的4个)。

之前施加到CGAffineTransformRotate parentView1 I,I可以拖动视图(红色垂直)和拖放到parentView1,其结果是作为图象2.

但是,如果我首先做一个CGAffineTransformRotate(见代码)上parentView1,然后通过拖放将红色垂直视图添加到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]; 

回答

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); 
相关问题