防止子视图在其 Superview 转换时进行转换
Posted
技术标签:
【中文标题】防止子视图在其 Superview 转换时进行转换【英文标题】:Preventing Subview from Transforming when its Superview Transforms 【发布时间】:2013-03-23 01:48:25 【问题描述】:我有以下设置。我有一个名为parentView
的UIView
,其中包含一个名为childView
的UIView
。 parentView
可以使用一些需要在parentView
上的触摸手势进行旋转和调整大小。 childView
在其 drawRect 方法中有一些绘图代码,需要随着 parentView
的转换而更新。
我注意到,当我变换 parentView
(缩放或旋转)时,childView
也会自动变换。问题是,虽然我确实希望在childView
上启动旋转变换,但我不希望它是缩放的,我宁愿执行它的绘图代码。
所以我的问题是,处理这种情况的好方法是什么?我注意到当我在 parentView
转换后在我的 childView
上调用“setNeedsDisplay
”时,它不会被执行。
【问题讨论】:
【参考方案1】:不要转换父视图;转换子视图的兄弟。
换句话说,您当前的设置如下所示:
transformedView
childView
相反,这样做:
parentView
transformedView
childView
这样转换不会影响孩子。
【讨论】:
这是个好主意,但在我的情况下,它涉及父视图和所有子视图之间的旋转,所以在完成之后,如果我尝试为任何子视图设置一个新的变换,它会得到搞砸了。 但是,如果我想实现类似 Marry-Go-round 之类的东西,其中机舱旋转移动但保持垂直笔直,该怎么办?【参考方案2】:我必须对parentView
应用旋转,然后设置parentView
和childView
的bounds 属性来调整它的大小。然后我能够成功地在drawRect
中重绘childView
。底线是,尽管我认为如果您在子视图上设置转换,我认为您将不得不在其子视图中使用它。我尝试单独设置变换,所有变换的时间都搞砸了。布伦特的上述情况在某些情况下也可能派上用场。
【讨论】:
以上是关于防止子视图在其 Superview 转换时进行转换的主要内容,如果未能解决你的问题,请参考以下文章
当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?
当superview也获得角半径时,子视图的SwiftUI角半径会发生变化