【问题标题】:Subviews Misplaced after superview is scaled via CGAffineTransform通过 CGAffineTransform 缩放超级视图后,子视图错位
【发布时间】:2014-11-28 23:23:14
【问题描述】:

我正在尝试使用: CGAffineTransform original = mv.transform; CGAffineTransform new = CGAffineTransformScale(original, 2, 2); 缩放 UiView 及其 UIImageView 子视图

但这会导致 ImageView 偏离其开始的位置:

在转换之前,图像视图(书)位于紫色圆圈的中心。这在转换后显示(在弹簧动画块中完成)

因为记录自动布局在 IB 中关闭

【问题讨论】:

  • @Andy 我确实使用自动布局将图像视图居中,但即使我在执行转换之前删除了约束,问题仍然存在
  • 我仍然相信它的自动布局在惹恼你。您是否考虑过使用 CALayer/CAShapeLayer?我知道让它们居中是额外的工作,但值得一试。在我用 translatesAutosizingMaskTo 将其关闭之前,我在自动布局上也有类似的行为......这里有一个相当全面的研究stackoverflow.com/questions/12943107/…
  • 我尝试使用自动布局(centerX 和 centerY)将子视图居中在较大的视图中。它工作得很好。你确定你的“书”是紫色圆圈的子视图吗?
  • @Andy 是的,它绝对是自动布局。我没有添加任何约束并使用它的 frame 属性设置视图,它工作得很好。
  • @rdelmar 您是否在设置 centerX 和 centerY 约束时也设置了视图的高度和宽度约束?我在 imageview 中添加了 centerX、centerY 以及高度和宽度约束。

标签: ios objective-c cocoa-touch autolayout cgaffinetransformscale


【解决方案1】:

因此,经过几个小时的修补,我能够产生预期的效果。我还在动画块中更改视图的中心,我发现如果我将分配中心值的语句分配新的变换之前放置,子视图在变换和居中期间保持居中 - 更改.此外,我发现如果我正在使用 UIView 子类,我必须在缩放和移动视图上的动画块之前调用layoutIfNeeded。有趣的是,在使用常规 UIView 对象时,我发现没有必要调用layoutIfNeeded 来产生在中心转换和变换之后保持子视图居中的预期效果。

我不知道为什么在变换和坐标移动期间需要这些特定条件来保持子视图居中。我一直在查看 Apple 文档,但还没有找到确切的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    相关资源
    最近更新 更多