【问题标题】: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];

【问题讨论】:

    标签: ios uiview cgaffinetransform


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多