2012-05-29 70 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); 
相關問題