具有自定义符号形状的 Swift 图表

Swift Charts with Custom Symbol Shapes

提问人:Ismet Sahin 提问时间:10/27/2023 最后编辑:Ismet Sahin 更新时间:10/27/2023 访问量:51

问:

以下代码尝试使用不同的符号显示两个点。第一个具有自定义形状。该代码导致错误 No exact matches in reference to static method 'buildExpression'。将 .symbol(point.symb) 替换为 .symbol(CustomTriangle()) 会显示带有自定义符号的两个点,表明 CustomTriangle 结构没问题。

图表框架中有两个 .symbol 修饰符,返回 ChartContent(而不是 View)的修饰符对于链接其他图表内容修饰符至关重要。有没有办法用自定义三角形显示第一个点,而用方形符号显示下一个点?

代码如下:

import SwiftUI
import Charts

struct Point: Identifiable {
    public let id = UUID()
    let x: Double
    let y: Double
    let symb: any ChartSymbolShape
}


public struct CustomTriangle: ChartSymbolShape {
    
    public var perceptualUnitRect = CGRect(x: 0, y: 0, width: 1, height: 1)
    
    public func path(in rect: CGRect) -> Path {
        var path = Path()
        path.move(to: CGPoint(x: rect.midX, y: rect.minY))
        path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
        path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
        path.closeSubpath()
        return path
    }
}


struct MyPlot: View {
    
    let points = [Point(x: 0, y: 0.5, symb: CustomTriangle()),
                  Point(x: 1, y: 1.0, symb: .square)]
    
    
    var body: some View {
        Chart {
            ForEach(points, id: \.id) {point in
                PointMark(x: .value("xaxis", point.x),
                          y: .value("yaxis", point.y))
                .symbol(point.symb)  // this works --> .symbol(CustomTriangle())
            }
        }
        .padding()
    }
}

struct ContentView: View {
    var body: some View {
        MyPlot()
        .padding()
    }
}
Swift iPhone SwiftUI 图表 符号

评论


答: 暂无答案