Ios 以编程方式绘制的圆不会快速显示
我正在尝试使用SwiftUI创建一个测试应用程序,用户在屏幕上拖动时可以在屏幕上绘图。然而,我在获得我用来表示钢笔的圆圈时遇到了一些困难 这是我正在使用的ContentView.swift代码Ios 以编程方式绘制的圆不会快速显示,ios,swift,swiftui,Ios,Swift,Swiftui,我正在尝试使用SwiftUI创建一个测试应用程序,用户在屏幕上拖动时可以在屏幕上绘图。然而,我在获得我用来表示钢笔的圆圈时遇到了一些困难 这是我正在使用的ContentView.swift代码 import SwiftUI var list_of_points = [CGPoint]() struct ContentView: View { var body: some View { ZStack{ Rectangle().fill(Color
import SwiftUI
var list_of_points = [CGPoint]()
struct ContentView: View {
var body: some View {
ZStack{
Rectangle().fill(Color.gray)
Text("Hello!")
}.gesture(DragGesture().onChanged({
value in
drag_responder(point: value.location)
}))
}
}
func drag_responder(point: CGPoint){
print("Drawing at \(point)")
list_of_points.append(point)
let pen = Circle().size(CGSize(width:10, height:10)).position(point)
pen
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
导入快捷界面
结构图{
变量点:[CGPoint]=[CGPoint]()
}
结构ContentView:View{
@国家私有变量currentDrawing:Drawing=Drawing()
@国有私有var图纸:[图纸]=[图纸]()
@国家私有变量颜色:color=color.black
@国家专用变量线宽:CGFloat=3.0
var body:一些观点{
VStack(对齐:。中心){
绘图板(currentDrawing:$currentDrawing,
图纸:$图纸,
颜色:$color,
线宽:$lineWidth)
}
}
}
结构绘图板:视图{
@绑定变量currentDrawing:绘图
@绑定var图纸:[图纸]
@绑定变量颜色:颜色
@绑定变量线宽:CGFloat
var body:一些观点{
GeometryReader{中的几何体
路径{Path in
用于在自绘制中绘制{
添加(图形:图形,路径:&路径)
}
添加(绘图:self.currentDrawing,toPath:&path)
}
.stroke(self.color,线宽:self.lineWidth)
.背景(颜色(白色:0.95))
.手势(
牵引力(最小距离:0.1)
.onChanged({(值)在
让currentPoint=value.location
如果currentPoint.y>=0
&¤tPoint.y<几何体尺寸高度{
self.currentDrawing.points.append(currentPoint)
}
})
.onEnded({(值)在
self.drawings.append(self.currentDrawing)
self.currentDrawing=绘图()
})
)
}
.frame(最大高度:。无穷大)
}
专用函数添加(图形:图形,路径:输入输出路径){
设点=绘图点
如果points.count>1{
因为我在0。。
import SwiftUI
struct Drawing {
var points: [CGPoint] = [CGPoint]()
}
struct ContentView: View {
@State private var currentDrawing: Drawing = Drawing()
@State private var drawings: [Drawing] = [Drawing]()
@State private var color: Color = Color.black
@State private var lineWidth: CGFloat = 3.0
var body: some View {
VStack(alignment: .center) {
DrawingPad(currentDrawing: $currentDrawing,
drawings: $drawings,
color: $color,
lineWidth: $lineWidth)
}
}
}
struct DrawingPad: View {
@Binding var currentDrawing: Drawing
@Binding var drawings: [Drawing]
@Binding var color: Color
@Binding var lineWidth: CGFloat
var body: some View {
GeometryReader { geometry in
Path { path in
for drawing in self.drawings {
self.add(drawing: drawing, toPath: &path)
}
self.add(drawing: self.currentDrawing, toPath: &path)
}
.stroke(self.color, lineWidth: self.lineWidth)
.background(Color(white: 0.95))
.gesture(
DragGesture(minimumDistance: 0.1)
.onChanged({ (value) in
let currentPoint = value.location
if currentPoint.y >= 0
&& currentPoint.y < geometry.size.height {
self.currentDrawing.points.append(currentPoint)
}
})
.onEnded({ (value) in
self.drawings.append(self.currentDrawing)
self.currentDrawing = Drawing()
})
)
}
.frame(maxHeight: .infinity)
}
private func add(drawing: Drawing, toPath path: inout Path) {
let points = drawing.points
if points.count > 1 {
for i in 0..<points.count-1 {
let current = points[i]
let next = points[i+1]
path.move(to: current)
path.addLine(to: next)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}