代码之家  ›  专栏  ›  技术社区  ›  3366784

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

  •  1
  • 3366784  · 技术社区  · 6 年前

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

    图形出现在 func draw(_ rect: CGRect) 方法

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

    在中更新子层的帧 func draw(\urect:CGRect) 方法

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

    使其看起来更好的快速修复方法是剪裁子视图图层。 这样圆就不会出血到主视图(橙色视图)。

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

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

    旋转期间

    During rotation

    enter image description here

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

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

    1 回复  |  直到 6 年前
        1
  •  5
  •   3366784    6 年前

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

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

    我们在生产应用程序上看不到这些问题,因为应用程序通常锁定在纵向模式。 苹果似乎也倾向于使用图像作为控件,避免画图。 这是Ray Wenderlich说的 article 我读过的。


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

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

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