在UIKit中绘制一个冲程&填充路径/形状非常简单.

例如,下面的代码画了一个红色圆圈,用蓝色划过.

override func draw(_ rect: CGRect) {
    guard let ctx = UIGraphicsGetCurrentContext() else { return }

    let center = CGPoint(x: rect.midX, y: rect.midY)

    ctx.setFillColor(UIColor.red.cgColor)
    ctx.setStrokeColor(UIColor.blue.cgColor)

    let arc = UIBezierPath(arcCenter: center, radius: rect.width/2, startAngle: 0, endAngle: CGFloat.pi * 2, clockwise: true)

    arc.stroke()
    arc.fill()
}

如何使用SwiftUI实现这一点?

Swift UI似乎支持:

Circle().stroke(Color.blue)
// and/or
Circle().fill(Color.red)

但不是

Circle().fill(Color.red).stroke(Color.blue) // Value of type 'ShapeView<StrokedShape<Circle>, Color>' has no member 'fill'
// or 
Circle().stroke(Color.blue).fill(Color.red) // Value of type 'ShapeView<Circle, Color>' has no member 'stroke'

我应该只画两个圆圈吗?这似乎有点傻.

推荐答案

你也可以结合使用strokeBorderbackground.

代码:

Circle()
    .strokeBorder(Color.blue,lineWidth: 4)
    .background(Circle().foregroundColor(Color.red))

结果:

Swift相关问答推荐

通过withstickedContinuation传递通用类型T

同步问题,发送Api Call之前未设置idToken

为什么我的引用类型对象在初始化后有3个强引用?

SwiftUI map 旋转

ARRaycast Query和前置摄像头(ARFaceTrackingConfiguration)

修改数组中每个类实例的属性

如何在DATE()中进行比较

从`compactMap()`闭包返回`nil`未通过结果类型判断

如何异步返回视图?什么?

SwiftUI 拖放:如果没有上下文类型,则无法解析对成员‘first’的引用

macOS SwiftUI: 如何触发删除一个项目?

`let case(value)` 和 `case(let value)` 之间的区别 (Swift)

不要从 NumberFormatter 获取货币符号

让我的函数计算数组 Swift 的平均值

如何为多个类 Swift 进行扩展

MKAnnotation Swift

如何在Swift中找出字母是字母数字还是数字

协议扩展中的where self是什么

Swift 2.0 按属性对对象数组进行排序

将 [String] 存储在 NSUserDefaults 中