如何解决SwiftUI:使用 CGAffineTransform 缩放路径以适合视图
我有一个绘图,我是从它自己的结构中的一组 CGPoints(即 [[CGPoints]])数组生成的(该结构本身有一些额外的数据)......我试图在我的使用以下代码查看:
class Drawing: ObservableObject {
@Published private var lines = [Line]()
@Published var currentIndex = 0
public var visibleLines: [Line] {
Array(lines.prefix(currentIndex))
}
}
class Line: ObservableObject {
var lineIndex = 0
var points = [CGPoint]()
}
Struct View: View {
@Published var drawing = Drawing()
func add(line: Line,to path: inout Path) {
let points = line.points
guard points.count > 1 else {
return
}
for i in 0 ..< points.count - 1 {
let current = points[i]
let next = points[i + 1]
path.move(to: current)
path.addLine(to: next)
}
}
var body: some View {
GeometryReader { geometry in
let frame = CGRect(x: geometry.frame(in: .local).minX,y: geometry.frame(in: .local).minY,width: geometry.frame(in: .local).width,height: geometry.frame(in: .local).height)
Path { path in
for line in drawing.visibleLines {
add(line: line,to: &path)
}
}
.scaled(for: frame)
.stroke(Color.white,linewidth: 2)
.frame(alignment: .center)
}
}
}
extension Path {
func scaled(for rect: CGRect) -> Path {
let scaleX = boundingRect.width/rect.width
print("scaleX = \(scaleX)")
let scaleY = boundingRect.height/rect.height
print("scaleY = \(scaleY)")
let scale = min(scaleX,scaleY)
print("scale = \(scale)")
return applying(CGAffineTransform(scaleX: scale,y: scale))
}
}
我试图使视图中间的绘图尽可能大,但目前它很小,并且随着用户向绘图添加点而按比例放大。我认为 CGAffineTransform 会缩放点以适合每个视图(通过我正在创建的 GeometryReader 框架),但它似乎相反。我还尝试(在我的“缩放”修饰符中)将数学切换为 rect.width/boundingRect.width 和 rect.height/boundingRect.height,但该行在视图中不可见...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。