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

336*_*784 1 core-graphics calayer ios swift

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

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

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

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

在我看来,有时子层会在设备旋转完成之前进行更新。因此出现了下面的第一张图片。

使这看起来更好一点的快速修复是剪辑子视图层。这样,圆圈就不会渗入主视图(橙色视图)。

尽管这并没有解决主要问题。我不知道为什么添加子层会导致此问题。

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

旋转期间

旋转期间

在此输入图像描述

注意:我没有添加示例代码,因为我见过的所有示例都有相同的问题。其他人通过硬编码视图的大小来修复此问题,因此旋转不会调整视图的大小,并且旋转也不会导致这种情况。他们还倾向于将视图锁定在纵向模式下。

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

336*_*784 5

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

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

我们在生产应用程序中没有看到这些问题,因为应用程序通常锁定在纵向模式下。苹果似乎也倾向于使用图像作为控件并避免绘图。这是根据我读过的Ray Wenderlich文章得出的。


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

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

这是一张显示带有子视图和子图层的旋转的图像。子视图可以优雅地旋转,因为它有约束。 在此输入图像描述