ios - CALayer subLayer 边界舍入误差?

标签 ios swift calayer

下图是使用CAShapeLayer构建的。灰色层是红色层的子层。

如果仔细观察灰色层边缘,您会看到红色层边缘渗漏出来——就好像灰色层错误地计算了它的宽度一样。这应该是不可能的,因为我将灰色层的宽度设置为红色层的宽度,而灰色层是红色层的子层。当我打印它们的宽度时,它们是完全相同的数字。

有谁知道出了什么问题以及如何解决这个问题?代码如下。

这似乎是某种舍入误差,因为调整框架宽度最终可以解决某些值的问题。但这仍然没有意义,因为所有子层的舍入误差应该相同。

enter image description here

class MyLayer {
     var redLayer = CAShapeLayer()
     var grayLayer = CAShapeLayer()

      init() {
         redLayer.addSublayer(graylayer)
      }

      func layoutSublayers(_ bounds: CGRect) {
          redLayer.frame = bounds
          grayLayer.frame = CGRect(x: 0, 
                                   y: 0, 
                                   width redLayer.bounds.width, 
                                   height: redLayer.bounds.height/2)
          draw()
      }

      func draw() {
        redLayer.fillColor = UIColor.red.cgColor
        redLayer.path = UIBezierPath(rect: redLayer.bounds).cgPath
        grayLayer.fillColor = UIColor.darkGray.cgColor
        grayLayer.path = UIBezierPath(rect: grayLayer.bounds).cgPath
      }

}

最佳答案

设置大小后尝试在layoutSublayers内添加灰色层。像这样:

override func layoutSublayers(of layer: CALayer) {
    redLayer.addSublayer(graylayer)
}

关于ios - CALayer subLayer 边界舍入误差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44706052/

相关文章:

ios - 试图在动画期间修改动画属性?

iOS Swift - 按下按钮后刷新整个应用程序

ios - NSUserDefaults 和我自己的链表实现

从内存中删除 UIView 时,swift deinit 方法不起作用

swift - AvPlayer 无法从自定义路径播放视频

iphone - 什么决定了 CALayer.position 的初始值?

ios - 播放堆叠视频

ios - 在iOS上相当于runTaskLater()

ios - 如何获得一张高质量图像,包括 ScrollView 上的 subview 图像

ios - CAFilter 仍然是私有(private) API 吗?