【问题标题】:How to align CAShapeLayer To parent View如何将 CAShapeLayer 对齐到父视图
【发布时间】:2019-10-04 16:51:58
【问题描述】:

我有一个贝塞尔路径形状,我需要将其设置为其父视图框架形状。我需要将它缩放到正确的大小,以便它可以适合自己的父级作为边框。 我正在使用 CAShapeLayer 将贝塞尔路径添加到父视图 subLayer,然后对其进行动画处理。

class FrameView: NSObject {
    var shapeLayer: CAShapeLayer!

    func frameLayer(frame targetFrame: UIView) -> CAShapeLayer {
        let bezierPath = UIBezierPath()
        bezierPath.move(to: CGPoint(x: 34.93, y: 0))
        bezierPath.addCurve(to: CGPoint(x: 36.05, y: 0.2), controlPoint1: CGPoint(x: 34.79, y: 0), controlPoint2: CGPoint(x: 35.45, y: -0))
        bezierPath.addLine(to: CGPoint(x: 36.16, y: 0.22))
        bezierPath.addCurve(to: CGPoint(x: 38, y: 2.85), controlPoint1: CGPoint(x: 37.27, y: 0.63), controlPoint2: CGPoint(x: 38, y: 1.68))
        bezierPath.addCurve(to: CGPoint(x: 38, y: 3), controlPoint1: CGPoint(x: 38, y: 3), controlPoint2: CGPoint(x: 38, y: 3))
        // MORE CODE FOR BEZIERPATH ...

        bezierPath.apply(CGAffineTransform(translationX: targetFrame.bounds.minX, y: targetFrame.bounds.minY))
        bezierPath.apply(CGAffineTransform(scaleX: 2.0, y: 2.0))

        self.shapeLayer = CAShapeLayer()
        shapeLayer.path = bezierPath.cgPath
        shapeLayer.fillColor = UIColor.white.cgColor
        shapeLayer.strokeColor = UIColor.clear.cgColor
        return shapeLayer

以下是我得到的。我在 StackOverflow 中尝试了一些解决方案,但对我不起作用。我需要的是将该白色框架设置为父视图的边框,即透明的灰色矩形:

【问题讨论】:

    标签: ios swift uibezierpath cashapelayer


    【解决方案1】:

    找到了解决办法, 第一个错误是我在 ViewController 中的某个地方更改了 UIView 框架,它给我的坐标总是比我预期的错误,所以我只是在 Storyboard 中创建了 UIView 并使用了它的插座。

    第二个错误是错误的数学计算。

    为了适应 shapeLayer 的父视图大小,我这样做了:

    bezierPath.apply(CGAffineTransform(scaleX: abs(targetFrame.bounds.size.width / bezierPath.cgPath.boundingBox.width), y: abs(targetFrame.bounds.size.height / bezierPath.cgPath.boundingBox.height)))
    

    在我尝试划分目标框架和 bezierRect 大小之前,但我没有使用 abs(),它给了我错误的结果!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多