代码之家  ›  专栏  ›  技术社区  ›  Peter Pik

创建拉伸半圆

  •  0
  • Peter Pik  · 技术社区  · 7 年前

    在这里您可以看到一个灰色图像,其中裁剪出一个较小的半圆:

    enter image description here

    迄今为止的代码:

        let path = UIBezierPath()
        path.move(to: bounds.origin)
        let center = CGPoint(x: bounds.origin.x + bounds.size.width / 2.0, y: bounds.origin.y)
        path.addArc(withCenter: center, radius: bounds.size.width / 2.0, startAngle: .pi, endAngle: 0, clockwise: false)
        path.addLine(to: CGPoint(x: bounds.origin.x + bounds.size.width, y: bounds.origin.y))
        path.addLine(to: CGPoint(x: bounds.origin.x + bounds.size.width, y: bounds.origin.y + bounds.size.height))
        path.addLine(to: CGPoint(x: bounds.origin.x, y: bounds.origin.y + bounds.size.height))
        path.close()
    
        let mask = CAShapeLayer()
        mask.path = path.cgPath
    
        layer.mask = mask
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Pushp    7 年前

    func addParabolaWithMax()  {
        let path = UIBezierPath()
    
        let p0 = CGPoint(x: 0, y: 0)
        let p2 = CGPoint(x: self.view.frame.size.width/2, y: 100)
    
        let p1 = CGPoint(x: self.view.frame.size.width, y: 0)
    
        path.move(to: p1)
        path.addQuadCurve(to: p0, controlPoint: p2)
    
        path.lineWidth = 1
        path.stroke()
        let line = CAShapeLayer()
        line.path = path.cgPath;
        line.strokeColor = UIColor.black.cgColor
        line.fillColor = UIColor.blue.cgColor
        view.layer.addSublayer(line)
    }
    

    enter image description here

        2
  •  0
  •   JonJ    7 年前
    class SampleViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            view.backgroundColor = UIColor.blue
        }
    
        override func viewWillLayoutSubviews() {
            super.viewWillLayoutSubviews()
            setMask(control: CGPoint(x: 40.0, y: 100.0))
        }
    
        func setMask(control: CGPoint) {
            let bounds = view.bounds
            let path = UIBezierPath()
            path.move(to: CGPoint(x: bounds.minX, y: bounds.maxY))
            path.addLine(to: bounds.origin)
            let control2 = CGPoint(x: bounds.maxX - control.x, y: control.y)
            path.addCurve(to: CGPoint(x: bounds.maxX, y: bounds.minY), controlPoint1: control, controlPoint2: control2)
            path.addLine(to: CGPoint(x: bounds.maxX, y: bounds.maxY))
            path.close()
            let mask = CAShapeLayer()
            mask.path = path.cgPath
            view.layer.mask = mask
    
        }
    }
    

    通过调整控制点,你可以改变曲率(iPhoneX的模拟器截图,因此是圆角的顶角!)。

    enter image description here

        3
  •  0
  •   JonJ    7 年前

    enter image description here

    C2 只是 bounds.max - C1.x, C1.y