移动到变换视图时保持原始视图方向

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以使文本保持从视图控制器到视图控制器

如何缩放视图并将自定义边框保持在原始大小\缩放?

UIButton 的图像使用滚动视图滚动,但它的动作/方法保持在原始位置

移动视图中的 CSS 图像保持率