2017-04-01 1 views
1

세 가지 모양을 만들려고합니다 : 원형, 사각형 & 삼각형. & 원을 만들었지 만 삼각형을 만들 수 없습니다. 가장 큰 문제는 세 가지 모양을 모두 화면 중앙에 유지하는 것입니다. 원과 정사각형은 괜찮지 만, 삼각형을 만들려고하면 삼각형이 작동하지 않습니다. 삼각형의 "끝"이 오른쪽을 향하도록 삼각형을 "재생 버튼"처럼 보이게하려고합니다. 여기에 코드가 있습니다.UIBezierPath 삼각형, 사각형, 원형 ​​스위프트 만들기

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 

} 

어디에서 삼각형의 형상이 잘못 되었습니까?

답변

3

추가 할 필요가있을 때 빼기. +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


놀이터 데모의 전체 코드는 다음과 같습니다.

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 
관련 문제