CALayer子图层在设备旋转期间不优雅

问题描述 投票:1回答:1

我直接在视图的图层上画了一个圆圈,设备旋转看起来很完美。

绘图发生在func draw(_ rect: CGRect)方法中。

然后,我在子层上绘制了圆圈,并将其添加到init方法中的视图中。

我在func draw(_ rect: CGRect)方法中更新子图层的框架。

在我看来,有时候在设备轮换完成之前更新子层。因此下面的第一张图片。

快速修复以使其看起来更好一点是剪切子视图层。这样圆圈就不会流到主视图(橙色视图)。

虽然这不是解决主要问题。我不知道为什么添加子层会导致此问题。

我也在它的超级视图的draw方法中绘制子层的内容。橙色视图不是超视图,超视图是中间的矩形

在轮换期间

During rotation

enter image description here

注意:我没有添加示例代码,因为我看到的所有示例都有相同的问题。其他人通过硬编码视图的大小来解决这个问题,因此旋转不会调整视图的大小,旋转也不会导致这种情况。他们也倾向于以纵向模式锁定视图。

虽然,如果需要示例代码,我可以创建一个简单的示例。

ios swift core-graphics calayer
1个回答
4
投票

我找到了解决这个问题的方法。

在我看来,其他人都有同样的问题。这是因为图层没有约束。

我们在生产应用上看不到这些问题,因为应用通常会以纵向模式锁定。看起来苹果似乎倾向于使用图像作为控件并避免绘图。根据我读过的Ray Wenderlich article的说法。


解决方案基本上是使用子视图(而不是子图层)并使用子视图中内置的图层来绘制。

本文解释了这个过程:https://marcosantadev.com/calayer-auto-layout-swift/

这是一个显示子视图和子图层旋转的图像。子视图优雅地旋转,因为它有约束。 enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.