Слой вида выглядит смещенным после создания - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь добиться этого с помощью CALayers

enter image description here

Но теперь я получаю это

enter image description here

Я не понимаю, почему.Это мой код:

required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)

        let point1 = CGPoint(x: 0.0, y: 0.0)
        let point2 = CGPoint(x: 18.0, y: 0.0)
        let point3 = CGPoint(x: 36.0, y: 0.0)
        let point4 = CGPoint(x: 54.0, y: 0.0)
        let point5 = CGPoint(x: 72.0, y: 0.0)
        let point6 = CGPoint(x: 90.0, y: 0.0)
        let point7 = CGPoint(x: 108.0, y: 0.0)

        let lineLength: CGFloat = 118.0

        layer.cornerRadius = frame.size.height / 2
        clipsToBounds = true

        layer.addSublayer(createLineLayer(startPoint: point1, endPoint: CGPoint(x: point1.x, y: lineLength), color: UIColor.lightGray))
        layer.addSublayer(createLineLayer(startPoint: point2, endPoint: CGPoint(x: point2.x, y: lineLength), color: UIColor.lightGray))
        layer.addSublayer(createLineLayer(startPoint: point3, endPoint: CGPoint(x: point3.x, y: lineLength), color: UIColor.lightGray))
        layer.addSublayer(createLineLayer(startPoint: point4, endPoint: CGPoint(x: point4.x, y: lineLength), color: UIColor.lightGray))
        layer.addSublayer(createLineLayer(startPoint: point5, endPoint: CGPoint(x: point5.x, y: lineLength), color: UIColor.lightGray))
        layer.addSublayer(createLineLayer(startPoint: point6, endPoint: CGPoint(x: point6.x, y: lineLength), color: UIColor.lightGray))
        layer.addSublayer(createLineLayer(startPoint: point7, endPoint: CGPoint(x: point7.x, y: lineLength), color: UIColor.lightGray))

        let skyBlue = UIColor(red: 100.0 / 255.0, green: 186.0 / 255.0, blue: 246.0 / 255.0, alpha: 1.0)

        pulseLayer1 = createLineLayer(startPoint: point1, endPoint: CGPoint(x: point1.x, y: lineLength), color: skyBlue)
        pulseLayer2 = createLineLayer(startPoint: point2, endPoint: CGPoint(x: point2.x, y: lineLength), color: skyBlue)
        pulseLayer3 = createLineLayer(startPoint: point3, endPoint: CGPoint(x: point3.x, y: lineLength), color: skyBlue)
        pulseLayer4 = createLineLayer(startPoint: point4, endPoint: CGPoint(x: point4.x, y: lineLength), color: skyBlue)
        pulseLayer5 = createLineLayer(startPoint: point5, endPoint: CGPoint(x: point5.x, y: lineLength), color: skyBlue)
        pulseLayer6 = createLineLayer(startPoint: point6, endPoint: CGPoint(x: point6.x, y: lineLength), color: skyBlue)
        pulseLayer7 = createLineLayer(startPoint: point7, endPoint: CGPoint(x: point7.x, y: lineLength), color: skyBlue)

        let pulseLayers: [CAShapeLayer] = [pulseLayer1, pulseLayer2, pulseLayer3, pulseLayer4, pulseLayer5, pulseLayer6, pulseLayer7]

        for pulseLayer in pulseLayers
        {
            layer.addSublayer(pulseLayer)

            let animation = CABasicAnimation(keyPath: "strokeEnd")
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.fromValue = 1
            animation.toValue = 0
            animation.duration = 0
            animation.isRemovedOnCompletion = false

            pulseLayer.add(animation, forKey: "initial")
        }

        transform = CGAffineTransform(rotationAngle: CGFloat.pi)
    }

private func createLineLayer(startPoint: CGPoint, endPoint: CGPoint, color: UIColor) -> CAShapeLayer
    {
        let path = UIBezierPath()
        path.move(to: startPoint)
        path.addLine(to: endPoint)

        let layer = CAShapeLayer()
        layer.strokeColor = color.cgColor
        layer.lineWidth = 10.0
        layer.path = path.cgPath

        return layer
    }

Вид ИСПРАВЛЕН на 118 х 118 точек.Я устанавливаю семь линий с 10 точками толщины и 8 точками между каждой линией.Так что это дает мне 10 x 7 + 6 x 8 = 118. Итак, я думаю, что у меня не должно быть никаких проблем с распределением.

Когда я удаляю отсечение (установив для clipToBound значение false) изакругление углов, отображение корректно на реальном устройстве.Вот снимок экрана с реального устройства:

enter image description here

НО, когда я получаю представление с помощью Debug View Hierarchy из Xcode.Это выглядит так

enter image description here

...