UIBezierPath创建三角形,方形,圆形Swift

问题描述:

我正在尝试创建三种形状:圆形,方形&三角形。我创建了圆形&方形,但无法创建三角形。我最大的问题是保持屏幕中心的所有三个形状。圆形和方形很好,但是当我尝试制作三角形时,它不起作用。我也试图让三角形看起来像一个“播放按钮”,以便三角形的“尖端”朝向右侧。这是代码。UIBezierPath创建三角形,方形,圆形Swift

func trainglePathWithCenter(center: CGPoint, side: CGFloat) -> UIBezierPath { 
    let path = UIBezierPath() 

    let startX = center.x - side/2 
    let startY = center.y - side/2 

    path.move(to: CGPoint(x: startX, y: startY)) 
    path.addLine(to: CGPoint(x: startX, y: startY - side)) 
    path.addLine(to: CGPoint(x: startX + side, y: startY + side/2)) 
    path.close() 

    return path 
} 


func circlePathWithCenter(center: CGPoint, radius: CGFloat) -> UIBezierPath { 
    let circlePath = UIBezierPath() 
    circlePath.addArc(withCenter: center, radius: radius, startAngle: -CGFloat(M_PI), endAngle: -CGFloat(M_PI/2), clockwise: true) 
    circlePath.addArc(withCenter: center, radius: radius, startAngle: -CGFloat(M_PI/2), endAngle: 0, clockwise: true) 
    circlePath.addArc(withCenter: center, radius: radius, startAngle: 0, endAngle: CGFloat(M_PI/2), clockwise: true) 
    circlePath.addArc(withCenter: center, radius: radius, startAngle: CGFloat(M_PI/2), endAngle: CGFloat(M_PI), clockwise: true) 
    circlePath.close() 
    return circlePath 
} 

func squarePathWithCenter(center: CGPoint, side: CGFloat) -> UIBezierPath { 
    let squarePath = UIBezierPath() 
    let startX = center.x - side/2 
    let startY = center.y - side/2 

    squarePath.move(to: CGPoint(x: startX, y: startY)) 

    squarePath.addLine(to: squarePath.currentPoint) 
    squarePath.addLine(to: CGPoint(x: startX + side, y: startY)) 
    squarePath.addLine(to: squarePath.currentPoint) 
    squarePath.addLine(to: CGPoint(x: startX + side, y: startY + side)) 
    squarePath.addLine(to: squarePath.currentPoint) 
    squarePath.addLine(to: CGPoint(x: startX, y: startY + side)) 
    squarePath.addLine(to: squarePath.currentPoint) 
    squarePath.close() 
    return squarePath 

} 

我在哪里错了三角形的几何?

当您需要添加时,会减去此值。请记住,+Y已关闭。

变化:

path.addLine(to: CGPoint(x: startX, y: startY - side)) 

要:

path.addLine(to: CGPoint(x: startX, y: startY + side)) 

这是在游乐场运行:

Triangle demo running in a Playground


以下是Playground演示的完整代码:

class Custom: UIView { 
    override func draw(_ rect: CGRect) { 
     let path = trainglePathWithCenter(center: self.center, side: self.bounds.width/2) 

     path.stroke() 
    } 

    func trainglePathWithCenter(center: CGPoint, side: CGFloat) -> UIBezierPath { 
     let path = UIBezierPath() 

     let startX = center.x - side/2 
     let startY = center.y - side/2 

     path.move(to: CGPoint(x: startX, y: startY)) 
     path.addLine(to: CGPoint(x: startX, y: startY + side)) 
     path.addLine(to: CGPoint(x: startX + side, y: startY + side/2)) 
     path.close() 

     return path 
    } 
} 

let custom = Custom(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) 
custom.backgroundColor = .white