我试着画一个相当基本的鸟的形状。我用圆圈来画身体,我试着画上喙(用红色突出显示),就像下面的参考图片所示。
图片参考:
x1c 0d1x的数据
struct Beak: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: rect.width/4, y: rect.height/2))
path.addLine(to: CGPoint(x: 0, y: rect.height/2))
// draw a line back to the circumference at a given angle
// & close it with an arc along the circumference of the Body circle
path.addLine(to: ??)
return path
}
}
struct BirdView: View {
var body: some View {
ZStack {
// MARK: Body
Circle()
.stroke(lineWidth: 10)
.frame(width: 150)
.overlay(alignment: .center) {
Circle()
.fill(.yellow)
}
// MARK: Beak
Beak()
.stroke(lineWidth: 5)
}
.frame(width: 300, height: 300)
.background(.orange)
}
}
字符串
我试图实现的是喙也关闭与弧沿着身体圆周,使我可以动画它以后与旋转,以模拟喙打开/关闭。任何帮助是感激。
2条答案
按热度按时间gfttwv5a1#
如果你使用
.addArc
来绘制曲线位,那么就没有太多了。如果你使用中间点作为弧的起点,然后使用.offset
将最终形状移动到适当的位置,那么可能会更容易。这也为稍后添加旋转效果做好了准备。为了保持鸟头的特征在一起,您可以将它们全部应用为基圆的叠加,或者您可以将它们构建在单独的
ZStack
中。在单独的ZStack
中进行可能更简单,这个ZStack
的帧大小可以用于确定圆的大小以及眼睛和喙。以下是经过调整的
Shape
:字符串
下面是你如何使用它。我忍不住给它做了动画,
型
的数据
os8fio9y2#
我不需要做数学运算来计算如何画出圆弧,而是使用
subtracting
从直角三角形中“减去”圆。字符串
然后喙和身体可以这样组合:
型
备注:
.round
线连接来处理喙,因为斜接连接看起来很糟糕输出量:
的数据