【问题标题】:SwiftUI macOS view starts lagging when displaying multiple chartsSwiftUI macOS 视图在显示多个图表时开始滞后
【发布时间】:2024-05-01 12:15:16
【问题描述】:

我在一个视图中显示多个图表。
图表只是框架中的路径,数据来自 csv 文件(不大于 400mb)。
这些图表显示在 LazyVGrid 内,整个视图位于滚动视图内。

加载视图大约需要 10 到 20 秒,但是当我开始滚动图表时,它变得非常滞后。
为了解决这个问题,我尝试将 .drawingGroup() 附加到图表视图,但几乎没有性能变化。

代码如下所示:

import SwiftUI


struct GroupView: View {

@State var chartData = [CGFloat]()

  let columns = [
        GridItem(.adaptive(minimum: 720))
 
       ]
    

  var body: some View {

VStack{

 ScrollView {
                
   LazyVGrid(columns: columns){

     CSVChart(data: chartData, chartName: String, x-yaxisName: [String](), lineColor: CGColor)
        .frame(width: 700, height: 300, alignment: .center)
        .drawingGroup() // there is as well no performance change when .drawingGroup()  is inside the chart view

        }

     
    }

}.onAppear{
   
 chartData = // get csv data logic

   }



}
}



我知道 csv 文件很大,这会导致运行缓慢,但我认为其他应用程序在处理大文件时并没有那么迟钝,所以这可能是可以修复的。
如果有人能帮我解决这个问题,那就太好了。

【问题讨论】:

  • 根据我的经验,SwiftUI 还没有为现实世界做好准备,并且在处理比显示表格视图更困难的任务时会立即动摇。我会尝试使用 Cocoa(或 UIKit)来实现它。
  • 嘿,你能解决这个问题吗?我也有同样的情况。 *.com/questions/68501790/…
  • @arata 不,很遗憾没有。仍在寻找一些好的解决方案。

标签: swift macos csv swiftui metalkit


【解决方案1】:

将轴添加到您的 ScrollView 以判断它可以在哪一侧增长。

ScrollView(.vertical) {

【讨论】:

  • 感谢您的提示,但仍然非常滞后。我现在将创建一个数据磁盘流,以避免缓冲内存中的所有数据并仅显示矢量图形。