【问题标题】:draw an arc from endpoints of line and fill in从线的端点绘制弧并填充
【发布时间】:2020-10-10 21:34:01
【问题描述】:

我做了以下事情:

    let xOrigin = (pointsOfPerformance[POP.gluteusMaximus.index].x_origin / 375) * self.view.bounds.width
    let yOrigin = (pointsOfPerformance[POP.gluteusMaximus.index].y_origin / 666.6666) * (self.view.bounds.width * 16 / 9)
    let p0 = CGPoint(x: xOrigin, y: yOrigin)
    let xDest = (pointsOfPerformance[POP.upperBack.index].x_origin / 375) * self.view.bounds.width
    let yDest = (pointsOfPerformance[POP.upperBack.index].y_origin / 666.6666) * (self.view.bounds.width * 16 / 9)
    let p1 = CGPoint(x: xDest, y: yDest)
    
    let midPoint = CGPoint(x: (xOrigin + xDest) / 2, y:
                            (yOrigin + yDest) / 2)
    let path = UIBezierPath()
    path.move(to: p0)
    path.addLine(to: p1)
    
    path.addArc(withCenter: p2, radius: 94, startAngle: 200, endAngle: 130, clockwise: true)
    let centerOfCircle = makePoint(xOffset: p2.x, yOffset: p2.y)
    view.addSubview(centerOfCircle)
    
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.cgPath
    shapeLayer.fillColor = UIColor.animationRed.cgColor
    shapeLayer.strokeColor = UIColor.animationRed.cgColor
    shapeLayer.lineWidth = 0.05
    view.layer.addSublayer(shapeLayer)

我怎样才能让圆圈只显示为从背面脱离线的曲线的一部分。目前尚不清楚我如何操纵该功能以仅使背面脱离线的部分可见。

【问题讨论】:

  • 你试过了吗:func addArc(withCenter center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, 顺时针: Bool)。这应该适用于 UIBezierPath。
  • 嗨。当我尝试时,我只能让整个圆圈出现。
  • 如果你得到一个圆圈,试着减小末端角度。例如,使用 startAngle: 0 和 endAngle:180(不是 endAngle:360)
  • 编辑示例代码以显示另一个 appendArc 函数(希望是您正在使用的函数)。
  • 感谢 apodidae。我得到了这个函数,它画了一个圆圈。但是我已经修改了我的帖子以说明我正在努力解决的问题。任何进一步的帮助将不胜感激。

标签: swift core-graphics


【解决方案1】:

这适用于 MacOS:

 class CustomView: NSView {
   override func draw(_ rect: CGRect) {
     let bkgrnd = NSBezierPath(rect: rect)
     let fillColor = NSColor.white
     fillColor.set()
     bkgrnd.fill()
          
     let center = NSMakePoint(rect.size.width/2,rect.size.height/2)
     let radius:CGFloat = rect.size.width/4

     let path1 = NSBezierPath()
     path1.appendArc(withCenter: center, radius: radius, startAngle: 90, endAngle: 270)
     NSColor.gray.set()
     path1.fill()

     let path2 = NSBezierPath()
     path2.appendArc(withCenter: center, radius: radius, startAngle: 270, endAngle: 90)
     NSColor.blue.set()
     path2.fill()
   }
 }

【讨论】:

    【解决方案2】:

    演示了在 MacOS 上获得一小部分圆的外围:

    class CustomView: NSView {
    override func draw(_ rect: CGRect ) {
     let bkgrnd = NSBezierPath(rect: rect)
     let fillColor = NSColor.white
     fillColor.set()
     bkgrnd.fill()
    
     let center = NSMakePoint(rect.size.width/2,rect.size.height/2)
     let radius:CGFloat = rect.size.width/4
    
     let circle = NSBezierPath()
     circle.appendArc(withCenter: center, radius: radius, startAngle: 0, endAngle: 360)
     NSColor.gray.set()
     circle.fill()
    
     let arc = NSBezierPath()
     arc.appendArc(withCenter: center, radius: radius, startAngle: 120, endAngle: 200)
     NSColor.blue.set()
     arc.fill()
     }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多