CALayer 子层在设备旋转期间不优雅
CALayer sublayer not graceful during device rotation
我直接在视图图层上画了一个圆圈,设备旋转看起来很完美。
绘图发生在 func draw(_ rect: CGRect)
方法中。
然后我在一个子图层上画了一个圆圈,并在初始化方法中将它添加到视图中。
我在 func draw(_ rect: CGRect)
方法中更新子图层的框架。
在我看来,有时在设备旋转完成之前更新子层。
因此下面的第一张图片。
使它看起来更好一点的快速修复方法是裁剪子视图层。
这样圆圈就不会渗入主视图(橙色视图)。
虽然这没有解决主要问题。
我不知道为什么添加子层会导致此问题。
我也在它的父视图的绘制方法中绘制子图层的内容。橙色视图不是超视图,超视图是中间的矩形
轮换中
注意:我没有添加示例代码,因为我看到的所有示例都有相同的问题。
其他人通过硬编码视图的大小来解决这个问题,因此旋转不会调整视图的大小,旋转也不会导致这种情况。
他们还倾向于将视图锁定为纵向模式。
不过,如果需要示例代码,我可以创建一个简单的示例。
我找到了解决问题的方法。
在我看来其他人都有同样的问题。
这是因为图层没有约束。
我们在生产应用中没有发现这些问题,因为应用通常锁定在纵向模式。
苹果似乎也倾向于使用图像作为控件并避免绘图。
这是根据我读到的 Ray Wenderlich article。
解决办法基本上是使用subviews(而不是sublayers),使用subview内置的layer来绘制。
本文讲解过程:https://marcosantadev.com/calayer-auto-layout-swift/
这是一张显示子视图和子层旋转的图像。
子视图优雅地旋转,因为它有约束。
我直接在视图图层上画了一个圆圈,设备旋转看起来很完美。
绘图发生在 func draw(_ rect: CGRect)
方法中。
然后我在一个子图层上画了一个圆圈,并在初始化方法中将它添加到视图中。
我在 func draw(_ rect: CGRect)
方法中更新子图层的框架。
在我看来,有时在设备旋转完成之前更新子层。 因此下面的第一张图片。
使它看起来更好一点的快速修复方法是裁剪子视图层。 这样圆圈就不会渗入主视图(橙色视图)。
虽然这没有解决主要问题。 我不知道为什么添加子层会导致此问题。
我也在它的父视图的绘制方法中绘制子图层的内容。橙色视图不是超视图,超视图是中间的矩形
轮换中
注意:我没有添加示例代码,因为我看到的所有示例都有相同的问题。 其他人通过硬编码视图的大小来解决这个问题,因此旋转不会调整视图的大小,旋转也不会导致这种情况。 他们还倾向于将视图锁定为纵向模式。
不过,如果需要示例代码,我可以创建一个简单的示例。
我找到了解决问题的方法。
在我看来其他人都有同样的问题。 这是因为图层没有约束。
我们在生产应用中没有发现这些问题,因为应用通常锁定在纵向模式。 苹果似乎也倾向于使用图像作为控件并避免绘图。 这是根据我读到的 Ray Wenderlich article。
解决办法基本上是使用subviews(而不是sublayers),使用subview内置的layer来绘制。
本文讲解过程:https://marcosantadev.com/calayer-auto-layout-swift/
这是一张显示子视图和子层旋转的图像。
子视图优雅地旋转,因为它有约束。