移动到变换视图时保持原始视图方向
Posted
技术标签:
【中文标题】移动到变换视图时保持原始视图方向【英文标题】:Keeping original view orientation when moving into a transformed view 【发布时间】:2012-05-29 15:37:30 【问题描述】:在图 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];
【问题讨论】:
【参考方案1】:我想出了一个解决方案,通过使用 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);
【讨论】:
以上是关于移动到变换视图时保持原始视图方向的主要内容,如果未能解决你的问题,请参考以下文章
使用 XIB 将 UIView 移动到其他视图内部时保持位置
如何保存uitextfield以使文本保持从视图控制器到视图控制器