2016-10-25 2 views

답변

6

UIBezierPathpath이라는 사인파를 그리려면 path.addLine(to:)을 사용하여 여러 개의 선분을 그립니다. 트릭은 각도 (0 ~ 360)를 점의 x 좌표로 변환하고 sin(x)을 점의 좌표 y으로 변환하는 것입니다. 여기

class SineView: UIView{ 
    let graphWidth: CGFloat = 0.8 // Graph is 80% of the width of the view 
    let amplitude: CGFloat = 0.3 // Amplitude of sine wave is 30% of view height 

    override func draw(_ rect: CGRect) { 
     let width = rect.width 
     let height = rect.height 

     let origin = CGPoint(x: width * (1 - graphWidth)/2, y: height * 0.50) 

     let path = UIBezierPath() 
     path.move(to: origin) 

     for angle in stride(from: 5.0, through: 360.0, by: 5.0) { 
      let x = origin.x + CGFloat(angle/360.0) * width * graphWidth 
      let y = origin.y - CGFloat(sin(angle/180.0 * Double.pi)) * height * amplitude 
      path.addLine(to: CGPoint(x: x, y: y)) 
     } 

     UIColor.black.setStroke() 
     path.stroke() 
    } 
} 

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

가 운동장에 실행 :

Sine wave in a Playground


는 @ 롭 갱신이 코드 @IBInspectable 특성으로 @IBDesignable을 여기

은 일례이며추가 외에도속성 그의 대답 here을 확인하십시오.