在图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];
答案 0 :(得分: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);