防止子视图在其 Superview 转换时进行转换

Posted

技术标签:

【中文标题】防止子视图在其 Superview 转换时进行转换【英文标题】:Preventing Subview from Transforming when its Superview Transforms 【发布时间】:2013-03-23 01:48:25 【问题描述】:

我有以下设置。我有一个名为parentViewUIView,其中包含一个名为childViewUIViewparentView 可以使用一些需要在parentView 上的触摸手势进行旋转和调整大小。 childView 在其 drawRect 方法中有一些绘图代码,需要随着 parentView 的转换而更新。

我注意到,当我变换 parentView(缩放或旋转)时,childView 也会自动变换。问题是,虽然我确实希望在childView 上启动旋转变换,但我不希望它是缩放的,我宁愿执行它的绘图代码。

所以我的问题是,处理这种情况的好方法是什么?我注意到当我在 parentView 转换后在我的 childView 上调用“setNeedsDisplay”时,它不会被执行。

【问题讨论】:

【参考方案1】:

不要转换父视图;转换子视图的兄弟。

换句话说,您当前的设置如下所示:

transformedView
    childView

相反,这样做:

parentView
    transformedView
    childView

这样转换不会影响孩子。

【讨论】:

这是个好主意,但在我的情况下,它涉及父视图和所有子视图之间的旋转,所以在完成之后,如果我尝试为任何子视图设置一个新的变换,它会得到搞砸了。 但是,如果我想实现类似 Marry-Go-round 之类的东西,其中机舱旋转移动但保持垂直笔直,该怎么办?【参考方案2】:

我必须对parentView 应用旋转,然后设置parentViewchildView 的bounds 属性来调整它的大小。然后我能够成功地在drawRect 中重绘childView。底线是,尽管我认为如果您在子视图上设置转换,我认为您将不得不在其子视图中使用它。我尝试单独设置变换,所有变换的时间都搞砸了。布伦特的上述情况在某些情况下也可能派上用场。

【讨论】:

以上是关于防止子视图在其 Superview 转换时进行转换的主要内容,如果未能解决你的问题,请参考以下文章

转换子图层时如何防止调用layoutSubviews?

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?

当superview也获得角半径时,子视图的SwiftUI角半径会发生变化

在 Superview 中更改子视图的框架

从SuperView的ViewController外部的类调用时,willRemoveSubview不会删除子视图吗?

从 SuperView 中删除子视图的问题 - Objective-C