swift - 如何将角半径添加到 UIBezier 路径弧

标签 swift uibezierpath

我正在使用 UIBezierPath arc 便捷方法创建一个 arc。我想要圆弧的末端 - 具体要求请参见附图! roundedRect 版本中使用的 cornerRadius 选项不适用于 arc 方法。任何人都知道如何实现这一目标?提前致谢。 (这与之前提出的问题不同,因为它提供了确切的要求)

 let center = CGPoint(x:bounds.width/2, y: bounds.height/2)
 let radius: CGFloat = max(bounds.width, bounds.height)
 let arcWidth: CGFloat = 10
 let startAngle: CGFloat = 4.6 / 3 * π
 let endAngle: CGFloat = 4.4 / 3 * π

 let path = UIBezierPath(arcCenter: center, radius: radius/2 - arcWidth/2, startAngle: startAngle, endAngle: endAngle, clockwise: true)

 path.lineWidth = arcWidth
 // all thats needed to make the ends rounded is
 path.lineCapStyle = .Round
 path.stroke()

enter image description here

最佳答案

解决方案

真正起作用的是 lineCap 属性。您可以使用下面的代码。

func drawCircle(view: UIView, startingAngle: CGFloat, endAngle: CGFloat) -> CAShapeLayer {
    let path = UIBezierPath(arcCenter: view.center, radius: CGFloat((view.bounds.size.height/2) - 10), startAngle: startingAngle, endAngle:endAngle, clockwise: true)

    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.CGPath

    shapeLayer.strokeColor = UIColor.blackColor().CGColor
    shapeLayer.lineWidth = 10.0
    shapeLayer.fillColor = UIColor.clearColor().CGColor
    shapeLayer.lineCap = kCALineCapRound

    view.layer.addSublayer(shapeLayer)

    return shapeLayer
}

结果

enter image description here

关于swift - 如何将角半径添加到 UIBezier 路径弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744802/

相关文章:

ios - 如何通过 SwiftUI 正确使用 google 登录

swift - 将所有 HTTP 重定向到 HTTPS,无需 ELB

swift - 为 ARQuickLook 提取 Reality Composer 场景

ios - 用条纹填充 UIBezierPath 形状

ios - 在同一个 View Controller 上按下 AlertViewController 上的确定按钮后重新加载 Collection View ?

cocoa - 在 Swift 中将存储属性添加到 NSManagedObject 的子类

objective-c - 如何删除用 NSBezierPath 绘制的内容?

ios - 在完成路径后移动 Sprite 时 SpriteKit 崩溃,仅在 64 位设备上

swift - 部分 UIView 的屏幕截图被屏蔽为 UIBezierPath/CGPath

ios - UIBezierPath 未在 iPhone 6/6+ 中的 UIViews 的正确边框上绘制